概述
deque容器是以双端队列的形式来组织元素的,可以在容器的头部和尾部高效的插入和删除元素。
1.deque容器的应用场景是先进先出的场景,像排队的队列。
2.可以使用下标来访问deque容器中的元素。
3.deque的组织方式导致其大小和容量总是相等的。
deque和vector的不同之处
1.deque为双向开口,可以在头部和尾部高效的插入和删除(而vector只可以尾部插入和删除)
2.deque的内部会多一个间接地过程,元素的存取和迭代器的效率相对比vector要慢一些。
3.迭代器需要在不同的地方跳转,因此其必须为一个智能指针。
4.在对内存有限制的系统中,deque可以比vector内含更多元素。
5.deque不支持对内存重分配的时机的控制,除了在头尾两端在其他位置插入和删除都会导致迭代器失效。
6.deque内存区块不再被使用的时候,会被释放。
deque和vector的相似之处
1.在中部进行插入和删除的速度相对比较慢。
2.迭代器和vector相似方便随机存取。
list容器具有vector和deque所不具备的条件是在容器的任何一个位置都可以比较高效的插入和删除
1.list的缺点是无法通过位置来直接访问序列中的元素
2.list容器中每个T对象,都被包装在一个内部结点对象中,结点对象中含有两个指针一个指向下一个元素,另一个指向前一个元素。
3.第一个元素的前向指针为空,最后一个元素的后向指针为空。
最后再来看一下forward_list, forward_list具有单向链接性。
fordward_list和list的最主要的区别是forward_list只能从头到尾遍历不可以反向遍历。
1.无法使用反向迭代器,只能自增。
2.没有最后一个可以返回的成员函数back(),只有第一个返回的成员函数front();
3.因为只可以通过自增到达前面的终点,因此其也不可以使用push_back(),pop_back(),emplace_back()。
#include "stdafx.h"
#include<deque>
#include<iostream>
#include<string>
using std::deque;
using std::cout;
using std::endl;
using std::string;
int _tmain(int argc, _TCHAR* argv[])
{
deque<int> d1;//使用默认构造函数没有分配内存,等到插入元素后再分配内存
deque<int> d2(10);//指定最初分配内存的空间,由于没有初始化所以最先的元素的都为0
cout << "d1.size:" << d1.size() << endl;
cout << "d2.size:" << d2.size() << endl;
d1.push_back(1);//尾部添加
d1.push_front(4);//头部添加
d1.pop_back();//尾部删除
d1.pop_front();//头部删除
d2.emplace_front(2);//在序列的开始处生成一个元素。
for (deque<int>::iterator it = d1.begin(); it != d1.end(); it++)
{
cout << *it << "t";
}
cout << endl;
for (deque<int>::iterator it = d2.begin(); it != d2.end(); it++)
{
cout << *it << "t";
}
cout << endl;
deque<string> d3{ "wordhd", "hello", "first" ,"nihao","sjado"};
for (deque<string>::iterator it = d3.begin(); it != d3.end(); it++)
{
cout << *it<<"t";
}
cout << endl;
deque<string> words_part{ std::begin(d3), std::begin(d3) + 5 };//和d3的前五个元素具有相同的值
for (deque<string>::iterator it = words_part.begin(); it != words_part.end(); it++)
{
cout << *it << "t";
}
cout << endl;
cout << d3.at(2) << endl;
return 0;
}
最后
以上就是甜美唇彩为你收集整理的deque,list容器的全部内容,希望文章能够帮你解决deque,list容器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复