cpp的STL值vector和deque

cpp的STL值vector和deque

vector的特点

在末尾操作数据的时间固定
插入数据的时间和数据插入前数据的个数成振臂
存储的元素数是动态的,vector负责管理内存

vector的操作

void tvector(){
    cout << "tvector" << endl;

    //实例化的方式。可以初始化大小
    vector<int> vec1;
    cout <<"vec1:"<< vec1.size() << " "<< vec1.capacity() << endl;
    vector<int> vec2(10);
    cout <<"vec2:"<< vec2.size() << " "<< vec2.capacity() << endl;
    vector<int> vec3(10,90);
    cout <<"vec3:"<< vec3.size() << " "<< vec3.capacity() << endl;
    vector<int> vec4(vec2);
    cout <<"vec4:"<< vec4.size() << " "<< vec4.capacity() << endl;
    vector<int> vec5(vec2.begin(),vec2.end());
    cout <<"vec5:"<< vec5.size() << " "<< vec5.capacity() << endl;

    //插入元素
    for(int i=0;i<10;i++) vec1.push_back(i);

    vec1.insert(vec1.begin(), 121);

    for (int i=0; i<10; i++) {
        vec2[i] = i;
    }

    //打印数组

    vector<int>::iterator elem;
    for( elem=vec1.begin(); elem!= vec1.end();++elem){
        cout << *elem << " ";
    }
    cout << endl;

    //超过边界
    cout << vec1[101] << endl;
    vec1.pop_back();
    cout << vec1.size()<<endl;

    //理解size(存储数据的大小)和capacity(能够允许的容量)
    //可以使用reserve重置vector大小
    vec1.reserve(20);
    vec1.push_back(21);
    cout <<"size=" <<vec1.size()<<" capacity="<<vec1.capacity()<<endl;

}

deque的操作

void tdequeue(){
    //deque 和vector类似,但是支持前后添加和删除元素
    cout << "tdequeue" << endl;

    deque<int> dq1;
    dq1.push_back(1);
    dq1.push_back(21);
    dq1.push_front(31);
    deque<int>::iterator elem;

    for(elem=dq1.begin();elem!= dq1.end();++elem){
        cout << *elem<<",";
    }
    cout << endl;

    cout << dq1.size() << endl;

}

deque与vector的主要不同之处在于:

1. 两端都能快速安插和删除元素,这些操作可以在分期摊还的常数时间(amortized constant time)内完成。

2. 元素的存取和迭代器的动作比vector稍慢。

3. 迭代器需要在不同区块间跳转,所以它非一般指针。

4. 因为deque使用不止一块内存(而vector必须使用一块连续内存),所以deque的max_size()可能更大。

5. 不支持对容量和内存重新分配时机的控制。不过deque的内存重分配优于vector,因为其内部结构显示,deque不必在内存重分配时复制所有元素。

6. 除了头尾两端,在任何地方安插或删除元素,都将导致指向deque元素的所有pointers、references、iterators失效。

7. deque的内存区块不再被使用时,会自动被释放。deque的内存大小是可自动缩减的。

8. deque与vector组织内存的方式不一样。在底层,deque按“页”(page)或“块”(chunk)来分配存储器,每页包含固定数目的元素。而vector只分配一块连续的内存。例如,一个10M字节的vector使用的是一整块10M字节的内存,而deque可以使用一串更小的内存块,比如10块1M的内存。所以不能将deque的地址(如&deque[0])传递给传统的C API,因为deque内部所使用的内存不一定会连续。

c++标准建议:vector是那种应该在默认情况下使用的序列。如果大多数插入和删除操作发生在序列的头部或尾部时,应该选用deque。

区别参考:

http://www.cnblogs.com/zhuyf87/archive/2012/12/09/2809896.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值