现在的位置: 首页 > 综合 > 正文

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

2018年02月21日 ⁄ 综合 ⁄ 共 1281字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.