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);
}