zoukankan      html  css  js  c++  java
  • c++STL容器之deque容器

    deque是双端数组

    deque和vector的区别

    • vector对于头部的插入和删除效率低,数据量越大,效率越低;
    • deque相对于而言,对头部的插入和删除比vector快;
    • vector访问元素时速度比deque快,这和两者的内部实现有关;

    deque内部工作原理

    deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据。中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间。

    deque容器的迭代器是支持随机访问的。

    一、deque构造函数

    deque<T> deqT
    deque(beg,end)
    deque(n,elem)
    deque(const deque &deq)
    #include<iostream>
    #include<deque>
    using namespace std;
    //加入const限制只读,并使用const_iterator
    void printDeque(const deque<int>&d) {
        for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
            cout << *it <<" ";
        }
        cout << endl;
    }
    
    void test() {
        deque<int> d1;
        for (int i = 0; i < 10; i++) {
            d1.push_back(i);
        }
        printDeque(d1);
        deque<int> d2(d1.begin(),d1.end());
        deque<int> d3(4,3);
        deque<int> d4(d1);
    }
    int main() {
        test();
        system("pause");
        return 0;
    }

    二、赋值操作(基本上与vector一致)

    #include<iostream>
    #include<deque>
    using namespace std;
    //加入const限制只读,并使用const_iterator
    void printDeque(const deque<int>&d) {
        for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
            cout << *it <<" ";
        }
        cout << endl;
    }
    
    void test() {
        deque<int> d1;
        for (int i = 0; i < 10; i++) {
            d1.push_back(i);
        }
        deque<int> d2;
        d2 = d1;
        deque<int> d3;
        d3.assign(d1.begin(),d1.end());
        deque<int> d4;
        d4.assign(4, 3);
    }
    int main() {
        test();
        system("pause");
        return 0;
    }

    三、deque大小操作(与vector也基本一致,但是deque中没有容量capaticy限制)

    四、deque插入和删除

    //两端插入
    push_back(ele);
    push_front(ele);
    pop_back();
    pop_front();
    //指定位置插入、删除,pos,beg,end都是迭代器
    insert(pos,ele);
    insert(pos,n,ele);
    insert(pos,beg,end);
    clear();
    erase(beg,end);
    erase(pos);

    五、deque数据存取(与vector一致,多了取头部的操作)

    deque<int> d1 ={1,2,3,4};
    访问第一个元素:
    d1[0];
    d1.at(0);
    修改第一个元素:
    d1[0] = 2;
    d1.at(0) = 2;
    访问首元素:
    d1.front();
    访问尾元素:
    d1.back();

    六、deque排序(利用algorithm中的sort,默认升序排序)

    #include<iostream>
    #include<deque>
    #include<algorithm>
    using namespace std;
    //加入const限制只读,并使用const_iterator
    void printDeque(const deque<int>&d) {
        for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
            cout << *it <<" ";
        }
        cout << endl;
    }
    
    void test() {
        deque<int> d1;
        for (int i = 0; i < 10; i++) {
            d1.push_front(i);
        }
        cout << "排序前:" << endl;
        printDeque(d1);
        sort(d1.begin(), d1.end());
        cout << "排序后:" << endl;
        printDeque(d1);
    }
    int main() {
        test();
        system("pause");
        return 0;
    }
  • 相关阅读:
    如何使用Win32API绘制树
    MSD_radix_sort
    Radix Sort
    Computer Science: the Big Picture
    天问之Linux内核中的不明白的地方
    viewController备注
    loadView、viewDidLoad及viewDidUnload的关系(转)
    iOS 中的视图函数 init initwithnib viewDidLoad viewWillAppear的总结
    做ios工程时,把UI从xib移动到代码中遇到的问题
    嘟嘟三期的所学所想
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12111628.html
Copyright © 2011-2022 走看看