deque同vector一样也是顺序容器。它内部拥有更复杂的数据结构,从deque队列的两端插入和删除元素都非常快,在容器中间插入或删除则需要付出的代价非常高。
deque的绝大部分操作与vector一致,如支持各种构造方式,push_back,insert,size,resize,empty,capacity等各种vector所支持的操作。并支持push_front(),pop_front()vector不支持的操作。
deque的一些性质:
1:与vector容器一样,在deque容器的中间insert或erase元素效率比较低。
2:不同于vector容器,deque容器提供高效地在其首部实现insert或erase操作,就像在容器尾一样。
3:与vector容器一样而不同于list容器的是,deque容器支持对所有元素的随机访问。
4:在deque容器首部或尾部插入元素不会使任何迭代器失效,而在首部或尾部删除元素则只会使指向该元素的迭代器失效。在deque容器的任何其他位置的插入与删除操作将使指向该容器元素的所有迭代器失效。
使用示例1:
#include <iostream>
#include <deque>
using namespace std;
template <typename T>
class Print{
public:
void operator() (T& t){
cout << t << " ";
}
};
int main(){
deque<int> d;
Print<int> print;
for(int i = 0; i < 5; ++i)
d.push_back(i + 1);
//push_front() only apply to list and deque
d.push_front(0);
//pop_front() only applyy to list and deque
cout << "pop_front():" << endl;
while(! d.empty()){
for_each(d.begin(),d.end(),print);
cout << endl;
d.pop_front();
}
//pop_back()
for(int i = 0; i < 5; ++i)
d.push_back(i + 1);
cout << "pop_back():" << endl;
while(! d.empty()){
for_each(d.begin(),d.end(),print);
cout << endl;
d.pop_back();
}
}
运行结果:
pop_front():
0 1 2 3 4 5
1 2 3 4 5
2 3 4 5
3 4 5
4 5
5
pop_back():
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
其他诸如swap,assign等操作同vector一致,使用示例可以直接参见
STL顺序容器之vector类型