请问一个关于STL stack里的top()函数的一个问题。

如上图,通过s.top()函数是可以直接修改栈堆最顶元素的值的。我们老师叫我们自己仿写一个栈,我写了一个,但是这个top()函数的功能却不懂怎么实现。如下图:错误提示是:... 如上图,通过s.top()函数是可以直接修改栈堆最顶元素的值的。我们老师叫我们自己仿写一个栈,我写了一个,但是这个top()函数的功能却不懂怎么实现。如下图:

错误提示是:error C2244: 'MyPittyStack<Type>::top' : unable to resolve function overload.
请问大神们,要怎么实现这个top()函数【返回栈最顶元素,并且能够修改其值】的功能呢?
展开
 我来答
花开伤落
2014-04-27 · TA获得超过118个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:101万
展开全部
#include <iostream>
#include <vector>

using namespace std;

template<class T, template<class, class> class Container = vector>
class MyStack
{
private:
Container<T, allocator<T> > Cont_;
public:
void push(const T& t)
{
Cont_.push_back(t);
}
void pop()
{
Cont_.pop_back();
}
T& top()
{
return Cont_.back();
}
bool empty()
{
return Cont_.empty();
}
size_t size()
{
return Cont_.size();
}
};


int main()
{
MyStack<int> s;
s.push(0);
s.top() = 20;
cout << s.top() << endl;

s.pop();

cout << boolalpha << s.empty() << endl;

}

LZ如果你是VC6.0可能无法运行这个程序,我强烈建议你把编译器换成至少VC2005,6.0太老了。她不支持很多c++特性。我们构建新的东西可以以原来的为基础,比如这道题。
更多追问追答
追问
谢谢你的解答!不过我有点看不懂你代码里【template  class Container = vector】这句的意思……STL的STACK源代码我也找过,也是有一个类似这样的Container……而且别人先答的已经解决了我的问题……不好意思- -
追答
这是C++的一个语法,学名叫template template  parameter ,这句的意思就是说默认双模板参数为
vector。同时你也可以指定它为list,deque。比如 MyStack 这个stack就以list模板为基础了。
elichn
推荐于2016-02-05 · TA获得超过229个赞
知道小有建树答主
回答量:148
采纳率:100%
帮助的人:133万
展开全部
#include <iostream>
using namespace std;

template<class Type>
class MyPittyStack
{
int i;
public:
Type a[100];
bool push(Type n);
Type &top();
MyPittyStack();
};

template<class Type>
MyPittyStack<Type>::MyPittyStack()
{
i = 0;
}

template<class Type>
bool MyPittyStack<Type>::push(Type n)
{
a[i++] = n;
return true;
}

template<class Type>
Type & MyPittyStack<Type>::top()
{
return a[i];
}

int main()
{
MyPittyStack<int> s;
s.push(123);
s.top() = 456;
cout<<s.top()<<endl;
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suiyue_2009
2014-04-26 · TA获得超过846个赞
知道小有建树答主
回答量:1248
采纳率:0%
帮助的人:884万
展开全部
Type *MyPittyStack()
{
return &s[tos-1];//如果是从0开始累积tos,就要-1
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式