文章目录
1. deque说明
- deque(double-ended queue)是双端数组,而vector是单端的
- deque在接口上与vector相似
- deque可以随机存取元素
- 在头部和尾部添加或删除较快,其余位置较慢
- 在两端插入和删除元素都不会导致重新分配空间
2. deque 对象的默认构造方式
deque <int> deqInt; // 一个存放 int 的 deque 容器。
deque <float> deq Float; // 一个存放 float 的 deque 容器。
3. deque的带参数构造方法
deque(beg,end); // 从[beg, end)区间中拷贝数据,beg和end为迭代器
deque(n,elem); // 将 n 个 elem 拷贝给本身
deque(const deque &deq); //拷贝构造函数
示例
deque<int> dq;
dq.push_back(1);
dq.push_back(2);
dq.push_back(3);
// 范围构造
deque<int> dq_c(dq.begin(), dq.end());
4. deque的末尾和头部的添加、删除操作
// 末尾添加和删除
deque.push_back(elem); // 在容器尾部添加一个数据
deque.pop_back(); // 删除容器最后一个数据
// 头部添加和删除
deque.push_front(elem); // 在容器头部插入一个数据
deque.pop_front(); // 删除容器第一个数据
5. deque数据的获取
// at方法,类似于vector操作
deque.at(idx); //返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range
// []操作符
deque[i]; // 获取deque的第i个元素,不抛出异常,直接报错
// 获取头部第一个数据
deque.front();
// 获取尾部数据
deque.back();
6. deque迭代器
deque.begin(); //返回容器中第一个元素的迭代器
deque.end(); //返回容器中最后一个元素之后的迭代器
deque.rbegin(); //返回容器中倒数第一个元素的迭代器
deque.rend(); //返回容器中倒数最后一个元素之后的迭代器
示例
deque<int> dq;
dq.push_back(1);
dq.push_back(2);
dq.push_back(3);
for (auto it = dq.begin(); it != dq.end(); ++it) {
cout << *it << endl;
}
7. deque的赋值操作
deque.assign(beg,end); // 从另一个deque的[beg, end)区间中的拷贝赋值给本身
deque.assign(n,elem); // 将 n 个 elem 拷贝赋值给本身
deque& operator=(const deque &deq); //重载等号操作符
deque.swap(deq); // 将 deq 与本身的元素互换
8. deque插入
deque.insert(pos,elem); // 在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置
deque.insert(pos,n,elem); // 在 pos 位置插入 n 个 elem 数据,无返回值
deque.insert(pos,beg,end); //在 pos 位置插入[beg,end)区间的数据,无返回值
9. deque的删除
deque.clear(); //移除容器的所有数据
deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置
deque.erase(pos); //删除 pos 位置的数据,返回下一个数据的位置
10. deque容器的大小
deque.size(); //返回容器中元素的个数
deque.empty(); //判断容器是否为空
// 重新设定容器大小
// 若容器变长,则以默认值填充新位置
// 如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num); //重新指定容器的长度为 num
// 重新设定容器大小
// 若容器变长,则以elem值填充新位置
// 如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num, elem); //重新指定容器的长度为 num