
 
C++:SLT容器-->deque
- 1. 构造函数
 - 2. deque 赋值操作
 - 3. deque 大小操作
 - 4. deque 插入和删除
 - 5. deque 容器数据存取
 - 6. deque 排序操作
 
双端数组,可以对头部和尾部进行插入删除操作
==需要导入头文件#include <deque>==
1. 构造函数
deque deqT; // 默认构造函数
deque(beg,end); // 构造函数将(beg,end)区间中的元素拷贝给本身
deque(n,ele); // 构造函数将n个ele拷贝给本身
deque(const deque &deq); // 拷贝构造函数
#include <iostream>
#include <deque>
using namespace std;
void printDeque(deque<int>& d){
    for(deque<int>::const_iterator it = d.begin();it!=d.end();it++){
        cout << *it << endl;
    }
}
void test(){
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i+1);
        // 尾部插入
        d1.push_front(i+1);
        // 头部插入
    }
    printDeque(d1);
    deque<int> d2(10,100);
    printDeque(d2);
    
}
int main() {
    test();
    return 0;
}
 
2. deque 赋值操作
deque& operator=(const deque &deq); // 重载等号操作符
assign(beg,end); // 将(beg,end)区间中的数据拷贝赋值给本身
assign(n,elem); // 将n个elem拷贝赋值给本身
void test(){
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_front(i+1);
        // 头部插入
    }
    printDeque(d1);
    deque<int> d2 = d1;
    // 重载等号操作符
    printDeque(d2);
    deque<int> d3;
    d3.assign(d2.begin(),d2.end());
    // 将(beg,end)区间中的数据拷贝赋值给本身
    printDeque(d3);
    deque<int> d4;
    d4.assign(10,1);
    printDeque(d4);
}
 

3. deque 大小操作
deque.empty(); // 判断容器是否为空
deque.size(); // 返回容器中元素的个数
deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值0重新填充位置;若容器变短,则末尾超出容器长度的元素被删除
deque.resize(num,elem); // 重新指定容器的长度为num,若容器变长,则以elem值填充新位置;若容器变短,则以末尾超出容器长度的元素被删除
void test(){
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_front(i+1);
        // 头部插入
    }
    printDeque(d1);
    cout << d1.empty() << endl;
    
    cout << d1.size() << endl;
    
    d1.resize(5);
    printDeque(d1);
    d1.resize(10);
    printDeque(d1);
    d1.resize(12,100);
    printDeque(d1);
}
 

4. deque 插入和删除
- 两端插入和删除操作
 
push_back(elem); // 在容器尾部插入一个数据
push_front(elem); // 在容器头部插入一个数据
pop_back(); // 删除容器最后一个数据
pop_front(); // 删除容器第一个数据- 指定位置进行插入和删除操作
 
insert(pos,elem); // 在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos,n,elem); // 在pos位置插入n个elem数据,无返回值
insert(pos,beg,end); // 在pos位置插入[beg,end)区间的数据,无返回值
clear(); // 清空容器的所有数据
erase(beg,end); // 删除[beg,end)区间的数据,返回下一个数据的位置
erase(pos); // 删除pos位置的数据,返回下一个数据的位置
void test(){
    deque<int> d1;
    d1.push_back(1);
    // 在尾部插入一个元素
    d1.push_front(2);
    // 在头部插入一个元素
    printDeque(d1);
    d1.pop_back();
    // 删除尾部第一个元素
    printDeque(d1);
    d1.push_front(1);
    deque<int>::const_iterator it = d1.begin();
    it++;
    d1.insert(it,3);
    // 插入操作
    printDeque(d1);
    d1.insert(it,2,10);
    printDeque(d1);
    deque<int> d2;
    for (int i = 5; i < 10; ++i) {
        d2.push_front(i);
    }
    d1.insert(it,d2.begin(),d2.end());
    printDeque(d1);
    d1.erase(it);
    printDeque(d1);
}
 

5. deque 容器数据存取
at(index); // 返回索引idx所指的数据
operator[]; // 返回索引idx所指的数据
front(); // 返回容器中第一个数据元素
back(); // 返回容器中最后一个数据元素
void test(){
    deque<int> d1;
    for (int i = 0; i < 5; ++i) {
        d1.push_back(i+1);
    }
    printDeque(d1);
    for (int i = 0; i < d1.size(); ++i) {
        cout << d1[i] << ends;
    }
    cout << endl;
    for (int i = 0; i < d1.size(); ++i) {
        cout << d1.at(i) << ends;
    }
    cout << endl;
    cout << "第一个元素" << d1.front()<< endl;
    cout << "最后一个元素" << d1.back()<< endl;
}
 

6. deque 排序操作
需要导入头文件#include <algorithm>
sort(iterator beg,iterator end); // 对beg和end区间内元素进行排序
void test(){
    deque<int> d1;
    d1.push_back(3);
    d1.push_back(100);
    d1.push_back(2);
    printDeque(d1);
    sort(d1.begin(),d1.end());
    // 默认升序
    printDeque(d1);
}
 




















