读书人

stack容器适配器有关问题模板里的参

发布时间: 2012-04-02 19:58:59 作者: rapoo

stack容器适配器问题,模板里的参数
大家好。。
我的问题是:
希望大家发表下自己对容器适配器的理解。。。。。随便说都行
另外是:
因为stack可以基于另外三种顺序容器来实现特有的操作,但是我对里面的模板参数有点不理解

如: stack<int> s_qint; //这说明s_int的值会是一个个的int型
stack<int,vector<int>> s_vint; //同上

如果stack<vector<int>, vector<int>> s; //编译运行都通过 编译器要求s的值是int型 为什么?
如果stack<int, vector<char*>> ps; //ps要求值是char*

总结我的问题是 stack尖括号里面的两个值有什么关系。。或者具体意义是?

[解决办法]
如果stack <vector <int>, vector <int>> s; //编译运行都通过 编译器要求s的值是int型 为什么?
如果stack <int, vector <char*>> ps; //ps要求值是char*
===============
这两行代码不对。

[解决办法]
stack 是一个Adapter, 它把某个你指定的容器的接口,改为栈的操作方式

stack的模板参数如下
template<class Ty,
class Container = deque<Ty> >
class stack
{ ... };

如果你写 stack <int, vector<int> > 即是说你要用一个vector<int>来存放int,但这个vector是用stack的方式来访问

如果你写 stack <int, vector<char*> > ,即你告诉编译器你要用一个vector<char*>来存放int(??!!),编译器会报类型不匹配错误
[解决办法]
如果stack <vector <int>, vector <int>> s;
==========要想以这种方式写,必须改成:
stack <vector <int>, vector<vector <int>> > s;
[解决办法]
给你看看stack的模板吧
template<class T, class container=deque<T> > class stack{......};

也就是说第2个模板参数是一个容器类型的参数.它是作为stack的一个内部实现.但是第2个参数里面存放的元素类型是依赖你第1个参数T的.

读书人网 >C++

热点推荐