C++,请问这个查看错误堆栈的程序源类是为什么错了?

共有 2487 人关注过本帖
标题:[求助]数字1,2,3,4顺序入栈,问有多少种出栈方式。
等 级:新手上路
帖 子:20
&&问题点数:0&&回复次数:8&&&
[求助]数字1,2,3,4顺序入栈,问有多少种出栈方式。
用的是Thinging in C++上的Stack类这是头文件//: C06:Stack3.h// From Thinking in C++, 2nd Edition// Available at // (c) Bruce Eckel 2000// Copyright notice in Copyright.txt// With constructors/destructors#ifndef STACK3_H#define STACK3_H
class Stack {
struct Link {
Link(void* dat, Link* nxt);
void push(void* dat);
void* peek();
void* pop();};#endif // STACK3_H ///:~这是Stack的定义//: C06:Stack3.cpp {O}// From Thinking in C++, 2nd Edition// Available at // (c) Bruce Eckel 2000// Copyright notice in Copyright.txt// Constructors/destructors#include "Stack3.h"#include "../require.h"
Stack::Link::Link(void* dat, Link* nxt) {
Stack::Link::~Link() { }
Stack::Stack() { head = 0; }
void Stack::push(void* dat) {
head = new Link(dat,head);}
void* Stack::peek() {
require(head != 0, "Stack empty");
return head-& }
void* Stack::pop() {
if(head == 0) return 0;
void* result = head-&
Link* oldHead =
head = head-&
delete oldH}
Stack::~Stack() {
require(head == 0, "Stack not empty");} ///:~这是测试Stack的一个例子,实现倒序输出,我现在就死用上面的资源文件实现“数字1,2,3,4顺序入栈,问有多少种出栈方式?”//: C06:Stack3Test.cpp// From Thinking in C++, 2nd Edition// Available at // (c) Bruce Eckel 2000// Copyright notice in Copyright.txt//{L} Stack3//{T} Stack3Test.cpp// Constructors/destructors#include "Stack3.h"#include "../require.h"#include &fstream&#include &iostream&#include &string&
int main(int argc, char* argv[]) {
requireArgs(argc, 1); // File name is argument
ifstream in(argv[1]);
assure(in, argv[1]);
// Read file and store lines in the stack:
while(getline(in, line))
textlines.push(new string(line));
// Pop the lines from the stack and print them:
while((s = (string*)textlines.pop()) != 0) {
cout && *s &&
}} ///:~谢谢!!!!!!
搜索更多相关主题的帖子:
等 级:新手上路
帖 子:20
比如说是1,2先进栈,2出栈,然后3, 4进栈.那么输出的结果就是2431倒序,后进先出但我不能用程序把它表述完全,听老师说要用两重递归会比较简单一点?不解?请大家指教!
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9796
专家分:208
以前用C写过一个,后来给弄掉了.应该和全排列差不多,只是多了个条件.
倚天照海花无数,流水高山心自知。
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2881
这个不是火车进站出站的问题吗?小规律,多试几个就总结到规律了!
Fight&&to win&&or&&die...
等 级:新手上路
帖 子:23
//如果只为算有多少种方式,那就纯粹是个数学问题,都不需要真的定义出一个栈。int Fn(int n){
if(n&=1) return 1;
//一个数时,只有一种输出
else return n*Fn(n-1);
//n个数时,第n个数可以出现在(n-1)个数的间隙中(包括两头,共n个间隙)。}void main(){
printf("个数:");
//几个数,如楼主的题则为4
scanf("%d",&cout);
int num = Fn(cout);
printf("共%d种\n",num);}//如果要将相应的入栈和出栈显示出来,那就要另想办法了,哈哈。
等 级:新手上路
可以用这个计算公式:Xn=(2n)!/[n!*(n+1)!],有四个数的话就有14种可能的出栈方式
等 级:新手上路
帖 子:20
还是解决了,用的是二叉树,我是想输出每一种可能。而不是仅仅知道它的个数
等 级:新手上路
帖 子:14
用二叉树?不解,能不能把你的思路说一下
长风破浪会有时,
直挂云帆济沧海。
等 级:贵宾
威 望:10
帖 子:1020
专家分:167
如果要解就DFS,如果要值就Catalan数
版权所有,并保留所有权利。
Powered by , Processed in 0.024656 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved用C++类模板实现栈结构出现的问题以及思考
从类模板引发的思考
C++中使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题。这里主要说说类模板
类模板的定义:
class Stacks
Stacks(void);
Stacks(int nSize);
Stacks(Type Arr[],int nSize);
~Stacks(void);
bool isEmpty();
bool isFull();
bool push(const Type &e);
Type pop();
Type getTop();
getLength();
void print();
Type *m_pA
函数的实现:
函数实现既可以放在类定义体内,又可以放在类定义体外,但是不管放在体内还是体外都必须放在头文件中,这点和inline函数有点类似。
分离编译:
如果声明和定义分别放在h文件和cpp文件呢?
这个时候如果在其他程序中用到了模板类中的函数,那么就会出现
vcSjsOXA4MqxuvK74beiyfrSu9CpseS7r6OsyOe5+7Hg0uvG98TcvavEo7DlwOC1xMq1z9a6r8r9seDS67PJb2JqzsS8/qOsxMfDtNTa1eLQqbqvyv3W0NP2tb0gVHlwZaOowODQzc671sOjqaOsseDS68b3uMPU9cO0vau0+sLrt63S67PJttTTprXEu+Ox4LT6wuvE2KOs0rvQqXB1bGyjrHB1c2i4w7bU06a24MnZ19a92sTYo6zV4tCptrzKx8601qq1xKOsy/nS1LTTwO3C28nPvbKjrLy0sePO0sPHvavEo7DlwOC1xMn5w/e6zcq1z9bP4Lult9bA66OstavKx9TayfqzybXEttTTpm9ias7EvP7W0LK7u+HT0NK7uPa6r8r9tcQyvfjWxrT6wuu1xKGjPC9wPgo8cD48c3Ryb25nPsDgxKOw5bXEzNjK4rHg0uujujwvc3Ryb25nPjwvcD4KPHA+xMfDtLzIyLtvYmrW0MO709C2/r341sa6r8r9o6xtYWluuq/K/dPWysfI57rOtffTw8SjsOXA4NbQtcS6r8r9xNijrM7Sw8fWqrXA0ruw47XEwOCjrG1haW66r8r9tffTw8v81rvQ6NKq1qq1wNK7uPZsaW5rtdjWt77N0NCjrLWrysfV67bUxKOw5cDgvs2yu9K70fnBy6Osy/y74dTabWFpbrqvyv3L+dTatcRjcHDA78PmsNHTw7W9tcS6r8r9yrXA/buvo6i+zcrH08O+38zlwODQzczmu7vNqNPDwODQzaOpo6zV4tH5vs2/ydLUtffTw8v8wcujrNLyzqrSqszmu7ujrMv50tS+zbHY0OvWqrXAuq/K/bXEtqjS5cHLo6zV4r7NysfOqsqyw7Sx2NDrtcPU2tK7uPbOxLz+1tDKtc/WxKOw5cDgtcTJ+cP3us22qNLloaM8L3A+CjxwPiA8L3A+CjxwPjxzdHJvbmc+suLK1LrN0enWpKO6PC9zdHJvbmc+PC9wPgo8cD7NqLn91NrEo7DlwODW0NT2vNPSu7j21eLR+bXEuq/K/TwvcD4KPHByZSBjbGFzcz0="brush:">template
void Stacks::print()
cout<<"This is a test ,I love you"
<<"I love you,I love you"<<
然后我们在main中调用print函数,在生成的debug文件中用notepad&#43;&#43;打开main.obj,我们可以看到有这样的字符出现:
这就说明了问题,main.cpp中实例化了函数的定义。
附带栈结构实现的C&#43;&#43;源代码
// Stacks.h
#pragma once
class Stacks
Stacks(void);
Stacks(int nSize);
Stacks(Type Arr[],int nSize);
~Stacks(void);
bool isEmpty();
bool isFull();
bool push(const Type &e);
Type pop();
Type getTop();
getLength();
void print();
Type *m_pA
Stacks::Stacks(void)
m_top = -1;
m_nLength = 10;
m_pArr = new Type[10];
if (m_pArr == NULL)
cout<<"Allocate stack failed"<<
m_top = m_nLength-1;
Stacks::Stacks(int nSize)
m_top = -1;
m_pArr = new Type[nSize];
if(m_pArr == NULL)
cout<<"Allocate stack failed"<<
m_top = nSize-1;
m_nLength = nS
Stacks::Stacks(Type Arr[],int nSize)
m_top = -1;
m_pArr = new Type[nSize];
if(m_pArr == NULL)
cout<<"Allocate stack failed"<<
for(int i=0;i<nSi++)
m_pArr[i] = Arr[i];
m_top = nSize - 1;
m_nLength = nS
bool Stacks::isEmpty()
return m_top == -1;
bool Stacks::isFull()
return m_top == m_nLength - 1;
Type Stacks::getTop()
if (m_top != -1)
return m_pArr[m_top];
cout<<"The stack is empty"<<
Type Stacks::pop()
if(m_top == -1)
cout<<"The stack is empty"<<
return m_pArr[m_top+1];
bool Stacks::push(const Type &e)
if(m_top == m_nLength-1)
cout<<"The stack is full"<<
m_pArr[m_top] =
int Stacks::getLength()
return m_nL
Stacks::~Stacks(void)
if(m_pArr != NULL)
delete m_pA
m_pArr = NULL;
void Stacks::print()
cout<<"This is a test ,I love you"
<<"I love you,I love you"<<
//main.cpp
#include"Stacks.h"
void main()
int a[7] = {1,2,3,4,5,6,7};
Stacks Sta(a,7);
cout<<Sta.isFull()<<
for(int i=0;i<7;i++)
int top = Sta.pop();
cout<<"The top is:"<<top<<
cout<<Sta.isEmpty()<<
cout<<Sta.getLength()<<
Sta.print();
Sta.print();
system("pause");Hadoop、Hive、Hbase、Flume等交流群:(定期清人)、群 (定期清人)。博客无法注册,请联系wyphao.
文章总数:532
浏览总数:4,493,720
评论:3097
分类目录:57 个
注册用户数:745
最后更新:日
欢迎关注微信公共帐号:iteblog_hadoop
Hadoop、Hive、Hbase、Flume等QQ交流群:(已满),请加入新群:
IT英文电子书免费下载频道上线啦,共收录4300+本IT方面的电子书,欢迎访问
【最新可访问的Hosts文件-日更新】:
一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?肯定是可以的。
只能在堆上分配空间:我们可将类的析构函数用private来修饰,也就是把析构函数私有化,因为自动变量与静态变量的对象都在释放空间的时候都需要访问析构函数。若析构函数私有,外面就不能调用,这时候会产生编译错误,这样就达到了只能在堆上分配空间了。但是,把析构函数私有化,那么我们就不能调用delete了, 因为它也需要访问析构函数。这就要求我们自己去提供回收内存空间的函数,以防内存泄漏。
#include&iostream&
class HeapOnly{
public:HeapOnly() { cout &&&This is a constructor function.&&&}
void destroyClass() const{ }
private:~HeapOnly() {} //外面不能调用了
int main(){
HeapOnly *heapOnly = new HeapO
heapOnly -&destroyClass();
只能在栈上分配空间:可将 T:: operator new 全部私有,因为要在堆上分配空间,需要用到new来实现,当你把new私有化,我们就不能调用new T()这样的语句,这样可以达到只能在栈上来分配空间了。
#include&iostream&
class StackOnly{
public:StackOnly() { cout &&&This is a constructor function.&&&}
~StackOnly() { cout&&&destructor Class.&&&}
private:void* operator new(size_t);//注意这里
int main(){
StackOnly stackO //这个可以
StackOnly *p_stackOnly = new StackO//这个不可以,因为new私有了
本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自
本文链接地址:
Linux库memset函数实现
Linux库memmove函数实现
Linux库memcpy函数实现
atoi和itoa函数实现
C和C++结构体的区别
C++中构造函数何时才会构建
C++四种强制类型转换
二叉树的链表表示法实现
下面文章您可能感兴趣【第15天第1堂课】栈类和队列类的开发(吕鑫:最博大精深的C++语法与数据结构视 - 在线观看 - 热点 - 乐视视频
【第15天第1堂课】栈类和队列类的开发(吕鑫:最博大精深的C++语法与数..
收藏成功!同时能自动追剧。
下载到电脑
缓存至手机
我们对您的信息保密并不收取任何费用
转存到云盘
方式B免费发短信到手机
我们对您的信息保密并不收取任何费用
方式C下载APP到本机
英雄,快来抢沙发!
英雄,快来抢沙发!
乐视集团旗下网站
乐视网频道
乐视网旗下产品
Copyright &
乐视网()All rights reserved.

我要回帖

更多关于 错变沉沦始末宅男客栈 的文章

 

随机推荐