Deque
双向数组
内部原理:
deque内部有一个中控器,维护每段缓冲地址的内容,缓冲区存放真实数据
中控器维护的是每个缓冲区的地址,使得使用deque像一片连续的内存空间
打印函数
void PrintDeque(const deque<int>d) {
for (deque<int>::const_iterator it = d.begin();it != d.end();it++) {
cout << *it<<" ";
}
cout << endl;
}
** 构造方式**
void test01() {
deque<int> d;//不传参
for (int i = 0;i < 10;i++) {
d.push_back(i);
}
PrintDeque(d);
deque<int>d2(d.begin(), d.end());//区间方式
PrintDeque(d2);
deque<int>d3(10,100);//n个指定值
PrintDeque(d3);
deque<int>d4(d3);//拷贝构造
PrintDeque(d4);
}
** 赋值操作**
void test02() {
deque<int> d;
for (int i = 0;i < 10;i++) {
d.push_back(i);
}
deque<int>d2 = d;//赋值号赋值
PrintDeque(d2);
deque<int>d3;
d3.assign(d2.begin(), d2.end());//assign区间赋值
PrintDeque(d3);
deque<int>d4;
d4.assign(10,100);//assign n个指定参数
}
** deque大小操作**
void test03() {
deque<int> d;
for (int i = 0;i < 10;i++) {
d.push_back(i);
}
if (d.empty()) {
cout << 1 << endl;
}
else {
//不为空
cout << 0 << endl;
cout<<d.size();//d的大小
//deque没有容量这个概率 因为是用中继器控制的
//可以无限开拓空间只需在中继器中加上这个空间的首地址即可
}
//重新指定大小
d.resize(15);//如果比原来长就用0填充
d.resize(5);//比原来短就截断
d.resize(10, 1);//重载 用1填充
}
deque插入和删除
void test04() {
//二端操作
deque<int>d;
//头插
d.push_back(1);
d.push_back(2);
//尾插
d.push_front(3);
d.push_front(4);
PrintDeque(d);
//尾删
d.pop_back();
//头删
d.pop_front();
//指定位置
d.insert(d.begin(), 100);//在头部插入100 第一个参数是一个迭代器 也可以通过定义一个迭代器在其他位置插入数据
d.insert(d.begin(), 2,100);//重载,在头部插入2个100
deque<int>d2;
d2.insert(d2.begin(),d.begin(), d.end());//按区间插入
//删除
d2.erase(d2.begin());//删除第一个
d2.erase(d2.begin(),d2.end());//按区间删除
d.clear();//清空
}
deque数据存取
void test05() {
deque<int> d;
for (int i = 0;i < 10;i++) {
d.push_back(i);
}
//听过[]方式输出
for (int i = 0;i < d.size();i++)
cout << d[i]<<" ";
//通过at函数输出
for (int i = 0;i < d.size();i++)
cout << d.at(i) << " ";
//访问头尾元素
cout << d.front() << endl;
cout << d.back() << endl;
}