以下是对于deque容器知识的整理
1、构造
2、赋值
3、大小操作
4、插入
5、删除
6、数据存取
7、排序
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
/*
deque容器:双端数组,可以对头端进行插入删除操作
deque与vector的区别:
deque对于头部的插入和删除效率更高
vector访问元素的速度更快
*/
/*
void printDeque(const deque<int> deq) // 传入只读deque,避免被修改
{
for(deque<int>::const_iterator it = ...) // 迭代器要用const_iterator
{
cout << ...
}
}
*/
void printDeque(deque<int> deq)
{
for(deque<int>::iterator it = deq.begin(); it!=deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
// deque构造
void test01()
{
deque<int> deq1;
deq1.push_back(1);
deq1.push_back(2);
deq1.push_back(3);
printDeque(deq1);
deque<int> deq2(deq1);
printDeque(deq2);
}
// deque赋值
void test02()
{
deque<int> deq1,deq2;
deq1.push_back(1);
deq1.push_back(2);
deq1.push_back(3);
deq2 = deq1;
printDeque(deq2);
}
// deque大小操作
void test03()
{
deque<int> deq1;
cout << deq1.empty() << endl;
deq1.push_back(1);
deq1.push_back(2);
deq1.push_back(3);
cout << deq1.empty() << endl;
cout << deq1.size() << endl;
// resize(size, num) 重新定义容器的大小,多余的位置用num来填充
}
// deque插入
void test04()
{
deque<int> deq;
// 尾插和尾删
deq.push_back(1);
deq.push_back(2);
deq.pop_back();
deq.push_front(3);
deq.push_front(4);
deq.pop_front();
printDeque(deq);
// clear()
deq.clear();
for(int i=0; i<4; i++)
{
deq.push_back(i);
}
printDeque(deq);
// insert(const_iterator pos, ele)
deq.insert(deq.begin()+1,5);
printDeque(deq);
deq.insert(deq.begin()+2,2,5); // 在该位置插入2个5
printDeque(deq);
deque<int> deq2;
deq2.push_back(10);
deq2.push_back(20);
deq2.push_back(30);
deq2.push_back(40);
deq2.push_back(50);
deq2.push_back(60);
// 将deq2的某个区间内的数字,插入到deq的某个位置处
deq.insert(deq.begin()+2, deq2.begin()+1, deq2.end()-1);
printDeque(deq);
}
// 5 删除函数erase()
void test05()
{
deque<int> deq;
deq.clear();
for(int i=0; i<10; i++)
{
deq.push_back(i);
}
// 1 erase(beg,end); 删除[beg,end)区间内的数据,返回下一个数据的位置
deq.erase(deq.begin()+3,deq.begin()+5);
printDeque(deq);
// 2 erase(pos); 删除pos位置的数据,返回下一个数据的位置
deq.erase(deq.end())
;printDeque(deq);
}
// 数据存取
void test06()
{
deque<int> deq;
deq.clear();
for(int i=0; i<10; i++)
{
deq.push_back(i);
}
// deq.at(ind);
cout << "deq.at(1) = " << deq.at(1) << endl;
// deq[ind];
cout << "deq[2] = " << deq[2] << endl;
// deq.front(); 返回第一个元素
cout << "deq.front() = " << deq.front() << endl;
// deq.back(); 返回最后一个元素
cout << "deq.back() = " << deq.back() << endl;
}
void test07()
{
deque<int> deq;
deq.push_back(30);
deq.push_back(20);
deq.push_back(10);
sort(deq.begin(), deq.end());
cout << "排序后:";
printDeque(deq);
}
int main(int argc, char **argv)
{
// 1 构造
cout << "1 构造" << endl;
test01();
cout << endl;
// 2 赋值
cout << "2 赋值" << endl;
test02();
cout << endl;
// 3 大小操作
cout << "3 大小操作" << endl;
test03();
cout << endl;
// 4 插入
cout << "4 插入" << endl;
test04();
cout << endl;
// 5 删除
cout << "5 删除" << endl;
test05();
cout << endl;
// 6 数据存取
cout << "6 数据存取" << endl;
test06();
cout << endl;
// 7 排序
cout << "7 排序" << endl;
test07();
cout << endl;
return 0;
}