deque容器的底层
有一个叫做中控器的东西去控制这个双端队列,中控器就类似操作系统中的页表,页表中记录着每个页框的地址;同样中控器就记录着每个缓冲区的位置,对于头插就在前端插入,尾插就在尾端插入,如果内存不够了就重新申请一片缓冲器,将其地址记录在中控器中。
以下图片截取自互联网
deque的构造赋值和插入删除
int main() {
deque<int> d;//默认构造函数
d.push_back(20);//尾插
d.push_back(25);
d.push_front(1);//头插
d.push_front(2);
d.pop_front();//头删
d.pop_back();//尾删
deque<int> d1(d);//拷贝构造函数
deque<int> d2(5,6);//初始化d2将5个6给他
deque<int> d3(d.begin(), d.end());//将d的迭代器之间的数给d3
d2 = d3; //重载运算符 赋值操作
d2.assign(5, 6);//assign()函数,将5个6赋值给d2
d2.assign(d3.begin(), d3.end());//将迭代器中的数给d2赋值上去
d2.insert(d2.begin(),5);//在d2的迭代器位置插入5
d2.insert(d2.begin(),2, 5);//在d2的迭代器位置插入2个5
d2.insert(d2.begin(), d.begin(),d.end());//在d2的迭代器位置d的迭代器位置的数据
d2.erase(d2.begin());//删除迭代器位置数据
d2.erase(d2.begin(), d2.end());//删除迭代器之间的数据
d2.clear();//清空容器
system("pause");
return 0;
}
deque的数据存取和容量大小
**int main() {
deque<int> d;
d.push_back(20);
d.push_back(25);
d.push_front(1);
d.empty();//判空
d.size();//容器大小
d.resize(10);//重新指定大小,如果比原数据大,就多的部分自动补0,比原数据小,就截取
d.resize(10, 2);//多的部分自动补2
//d.capacity();//非法操作,与vector不同,不存在这个函数
int num = d[0];//运算符重载,获取第一个数,与数组类似
num = d.at(0);//at()函数,获取元素
num = d.front();//返回第一个数
num = d.back();//返回最后一个数
system("pause");
return 0;
}**