猿问

关于vector stack(堆栈)有什么区别吗?

vector 可以代替stack 使用么,怎么代替
成员函数有什么?对应什么?

HUH函数
浏览 558回答 2
2回答

呼唤远方

  “Stack extends Vector”从语义上意味着:堆栈是个向量 或者 堆栈属于向量。  其实从现实生活中,并不会认为堆栈是从向量衍伸而来的,所以这种继承关系会让人从语义上觉得奇怪。  有点像是:某人为了贪图方便,定义猴子的时候,直接从人类继承过来了;结果语义变成了 猴子属于人类。  Effective java上说继承有自己的一些原则,但是显然栈并不是向量,所以栈不应该扩展向量。同样的,Properties不应该继承HashTable.这样回导致子类拥有一些父类的方法,逻辑奇怪也可能出现歧义。

摇曳的蔷薇

vector可以替代stack,stack仅支持一端操作(push,pop),而vector除此之外(push_back,pop_back)还支持中间插入(insert)、‘移除(erase),所以要用vector替代stack如有:/*struct&nbsp;TreeNode&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;val;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode&nbsp;*left;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode&nbsp;*right;};*/stack<TreeNode*>&nbsp;s;s.push(root);while(!s.empty())&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;TreeNode&nbsp;*tmp&nbsp;=&nbsp;s.top();&nbsp;&nbsp;&nbsp;&nbsp;if(tmp&nbsp;!=&nbsp;NULL)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;tmp->val;&nbsp;//&nbsp;visit&nbsp;node.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(tmp->right);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(tmp->left);&nbsp;&nbsp;&nbsp;&nbsp;}}想直接替换可以改为:vector<TreeNode*>&nbsp;s;s.push_back(root);while(!s.empty())&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;TreeNode&nbsp;*tmp&nbsp;=&nbsp;s.back();&nbsp;&nbsp;&nbsp;&nbsp;if(tmp&nbsp;!=&nbsp;NULL)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;tmp->val;&nbsp;//&nbsp;visit&nbsp;node.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push_back(tmp->right);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push_back(tmp->left);&nbsp;&nbsp;&nbsp;&nbsp;}}在STL中stack本身就是一个容器适配器,默认情况是以deque实现:template&nbsp;<&nbsp;class&nbsp;T,&nbsp;class&nbsp;Container&nbsp;=&nbsp;deque<T>&nbsp;>&nbsp;class&nbsp;stack;这里的Container必须supports the following operations:front()back()push_back()pop_back()而vector就满足这些条件,所以要用vector替代deque作为stack的底层容器,只需这样定义即可:stack<TreeNode*,&nbsp;vector<TreeNode*>&nbsp;>&nbsp;&nbsp;stk;
随时随地看视频慕课网APP
我要回答