官方网站开发方案,怎样设计网页教程,哪家公司因为做网站失败了,海外酒店网站建设stack与queue与前面学过的容器不同#xff0c;它是容器适配器#xff0c;什么意思呢#xff0c;就是使用之前学过的vector、list来模拟实现stack、queue#xff0c;接下来来实现一下。 templateclass T, class container std::dequeTclass stack{public:v…stack与queue与前面学过的容器不同它是容器适配器什么意思呢就是使用之前学过的vector、list来模拟实现stack、queue接下来来实现一下。 templateclass T, class container std::dequeTclass stack{public:void pop(){c.pop_back();}void push(const T value){c.push_back(value);}const T top(){return c.back();}size_t size(){return c.size();}bool empty(){return c.empty();}private:container c;};
其中模板class就是参数与函数参数十分类似它不仅可以是数据类型还可以是逻辑类型比如后面的容器参数给了一个默认参数deque。在使用的过程中呢我们也可以使用vector、list作为底层容器
void test1()
{w::stackint,std::vectorint s;//w::stackint, std::listint s;//w::stackint, std::string s;s.push(1);s.push(2);s.push(3);s.push(300);std::cout s.top()std::endl;s.pop();std::cout s.top() std::endl;;s.pop();std::cout s.top() std::endl;;s.pop();std::cout s.top() std::endl;;
}
vector以及list都可以打印出正确的数字但是使用string时出现了错误300打印为了44为什么呢string是“char的vector”所以可以用来接收数字但是由于char只有8个字节所以范围为-128~127也就是256个数在接收300时发生截断得到了44可以看一下补码计算可得截断后的数字。还有一件事就是在模拟实现stack时一定要复用可用容器的共有函数。
queue由于queue需要先进先出所以肯定会存在头删那么就不再使用vector作为底层容器因为vector不提供直接的头删。也不可以使用erase删除头节点虽然理论上是可行的大部分容器也都有erase但是考虑到vector头删效率太低要挪动大量数据所以不使用vector作为queue的底层容器
templateclass T, class container std::dequeT//队列不用vectorclass queue{public:void pop(){c.pop_front();}void push(const T value){c.push_back(value);}const T back(){return c.back();}const T front(){return c.front();}size_t size(){return c.size();}bool empty(){return c.empty();}private:container c;};