C++deque介绍
deque是一个双向队列,优化了对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一个区块朝某方向发展,最后一个区块朝另一个方向发展。它允许较为快速地随机访问但它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。deque的特点:1、支持随机访问,即支持[]以及at(),但是性能没有vect...
deque是一个双向队列,优化了对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一个区块朝某方向发展,最后一个区块朝另一个方向发展。它允许较为快速地随机访问但它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。
deque的特点:
1、支持随机访问,即支持[]以及at(),但是性能没有vector好
2、可以在内部进行插入和删除操作,但性能不及list。
deque和vector的不同之处:
1、deque两端都能够快速的插入和删除元素。vector只能在尾端进行。
2、deque的元素存取和迭代器操作会稍微慢一些。因为deque的内部结构会多一个简介过程。
3、迭代器时特殊的智能指针,而不是一般指针。它需要在不同的区块之间跳转。
4、deque可以包含更多的元素,其max_size可能更大。因为不止使用一块内存。
5、不支持对容量和内存分配时机的控制。
容器的选择:
1、强调快速随机访问,则vector比list好得多。
2、已知要存储元素的个数。vector好于list。
3、强调增删且不要在两端插入修改元素,则list显然要比vector好。
4、除非我们需要在容器首部插入和删除元素,deque好于vector。
实例:
插入操作:
deque<string> dec;
dec.push_back("hello"); //尾部插入
dec.push_front("world"); //头部插入
//insert操作
//iterator insert (iterator position, const value_type& val);
dec.insert(dec.end(), "aaaaaa");
//void insert (iterator position, size_type n, const value_type& val);
dec.insert(dec.end(), 5, "bbb");
//void insert (iterator position, InputIterator first, InputIterator last);
deque<string> t_dec(2,"ccc");
dec.insert(dec.end(), t_dec.begin(), t_dec.end());
删除操作:
dec.pop_back(); //尾部删除
dec.pop_front(); //头部删除
//erase操作
//iterator erase (iterator position);
dec.erase(dec.begin());
//iterator erase (iterator first, iterator last);
dec.erase(dec.end()-3, dec.end());
//删除指定元素
deque<string>::iterator iter;
for(iter = dec.begin(); iter != dec.end(); )
{
if(*iter == "bbb")
{
iter = dec.erase(iter);
}
else
{
++iter;
}
}
dec.back(); //返回最后一个元素
dec.front(); //返回第一个元素
dec.empty(); //判断是否为空
//调整容器大小,不足以参数2补充
dec.resize(5);
dec.resize(5,"hello");
dec.size(); //容器大小
deque<string> s_dec;
swap(s_dec, dec); //交换容器内容
s_dec.swap(dec); //交换容器内容
dec.clear(); //清空
//反序输出
deque<string>::reverse_iterator rit;
for(rit = dec.rbegin(); rit != dec.rend(); ++rit)
{
cout<<*rit<<endl;
}
参考:
https://blog.csdn.net/xiajun07061225/article/details/7442816
更多推荐
所有评论(0)