c\c++复习基础要点13---容器deque
来源:互联网 发布:java微信二次开发 编辑:程序博客网 时间:2024/05/16 09:21
容器deque和vector非常相似。它也采用动态数组来管理元素,提供随机存取,并有着和vector几乎一模一样的接口。不同的是deque的动态数组头尾都是开放,因此能再头尾两端进行快速安插和删除。
deque与vector不同的接口:
c.push_front(elem); 在头部插入elem的一个副本
c.pop_front(); 移除头部元素
deque的各项操作只有一下几点和vector不同:
1. deque不提供容操作(capacity()和reserve())
deque不支持对容器和内存重分配。特别注意的是,除了头尾两端,在任何地方安插或删除元素,都将导致指向deque元素的任何引用、指针、迭代器失效。
2. deque直接提供函数,用以完成头部元素的安插和删除(push_front()和pop_front())
3. 除了at(),没有任何成员函数会检查索引或迭代器是否有效
4. 元素的插入或删除可能可能导致内存重新分配,所以任何安插或删除动作都会使所有指向deque元素的指针、引用、迭代器失效。唯一例外是在头部或尾部。动作之后,指针和引用仍然有效(但是迭代器就没那么幸运)。
总之,如果是以下情形,最好采用deque
1. 你需要在两端安插和删除元素
2. 无需引用容器内的元素
deque实例:
#include<iostream>
#include<deque>
#include<string>
#include<algorithm>
using namespace std;
void main()
{
deque<string> coll;
coll.assign(3,string(“string”));
coll.push_back(“last string”);
coll.push_front(“first string”);
copy(coll.begin() , coll.end() ,
ostream_iterator<string>(cout , “\n”));
cout<<endl;
coll.pop_back();
coll.pop_front();
for(int i=1; i<coll.size();++i)
{
coll[i]= “another” + coll[i];
}
coll.resize(4, “resized string”);
copy(coll.begin() , coll.end() ,
ostream_iterator<string>(cout , “\n”));
cout<<endl;
}
程序输出:
first string
string
string
string
last string
string
another string
another string
resized string
- c\c++复习基础要点13---容器deque
- c\c++复习基础要点12---容器vector
- c\c++复习基础要点14----容器list
- c\c++ 复习基础要点06---联合体
- 复习C要点
- C语言复习要点
- c\c++复习基础要点08--c++单例模式
- c\c++复习基础要点10---智能指针
- c\c++复习基础要点16----枚举类型
- C++map容器复习
- c语言复习要点摘要
- C++STL学习(2)容器deque
- 【day0411 C++】顺序容器 STL deque类
- C语言基础要点
- c\c++ 复习基础要点04 C与C++程序的内存结构的不同
- C基础的复习
- C语言基础复习
- C指针基础复习
- 【leetcode】Merge Sorted Array
- POJ 4047 Garden (线段树)
- C++类的类内调用与类外调用测试分析说明
- WIN7/2003/XP 远程强制登录
- 【Rails学习笔记】页面布局
- c\c++复习基础要点13---容器deque
- 数据库 并发调度技术 四种问题 三级封锁协议
- PE文件结构详解(四)PE导入表
- struts的运行历程以及jsp中路径问题
- UVa 10114 Loansome Car Buyer (模拟)
- g++链接库的顺序导致的问题
- BufferedImage与byte[]互转
- Android网络连接判断与处理
- C++中extern “C”含义深层探索