读书人

c\c++温习基础要点13-容器deque

发布时间: 2013-10-07 19:41:22 作者: rapoo

c\c++复习基础要点13---容器deque

容器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++

热点推荐