请问一个关于STL stack里的top()函数的一个问题。
如上图,通过s.top()函数是可以直接修改栈堆最顶元素的值的。我们老师叫我们自己仿写一个栈,我写了一个,但是这个top()函数的功能却不懂怎么实现。如下图:错误提示是:...
如上图,通过s.top()函数是可以直接修改栈堆最顶元素的值的。我们老师叫我们自己仿写一个栈,我写了一个,但是这个top()函数的功能却不懂怎么实现。如下图:
错误提示是:error C2244: 'MyPittyStack<Type>::top' : unable to resolve function overload.
请问大神们,要怎么实现这个top()函数【返回栈最顶元素,并且能够修改其值】的功能呢? 展开
错误提示是:error C2244: 'MyPittyStack<Type>::top' : unable to resolve function overload.
请问大神们,要怎么实现这个top()函数【返回栈最顶元素,并且能够修改其值】的功能呢? 展开
展开全部
#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模板为基础了。
展开全部
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Type *MyPittyStack()
{
return &s[tos-1];//如果是从0开始累积tos,就要-1
}
{
return &s[tos-1];//如果是从0开始累积tos,就要-1
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询