Double ended queue
的简称
双端数据,可以对头端进行插入删除操作
deque与vector区别:
deque内部工作原理:
dequedeqT;
//默认构造deque(beg, end);
//构造函数将[beg,end)区间内的元素拷贝给自身deque(n, ele);
//构造函数将n个ele拷贝给自身deque(const deque& deq);
//拷贝构造函数如果要限制一个容器为只读状态,那么他的迭代器也要发生改变
#include#includeusing namespace std; //加const,限定只读 void Print(const deque& d) { //需要一个只读迭代器,否则会报错:不存在适当转换 for (deque::const_iterator it = d.begin(); it != d.end(); it++) { //*it = 10;容器中的数据不可以修改了 cout << *it << endl; } } int main() { dequed(10, 9); Print(d); return 0; }
重载=运算符:
deque& operator=(const deque& deq);
assign方式赋值:
.assign(beg, end);
//将[beg,end)区间内的数据拷贝赋值给自身.assign(n, elem);
//将n个elem拷贝赋值给自身deque复制操作与vector相同,需要熟练掌握
#include#includeusing namespace std; void Print(const deque& d) { for (deque::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it << " "; } cout << endl; } int main() { dequed1(10, 9); //operator=赋值 dequed2; d2 = d1; Print(d2); //assign赋值 dequed3; d3.assign(d1.begin(), d1.end()); Print(d3); d3.assign(2, 3); Print(d3); return 0; }
.empty();
//判断容器是否为空.size();
//返回容器中元素的个数.resize(int num);
//重新指定容器的长度为num,若容器变长,则以默认值0填充新位置;如果容器变短,则末尾超出容器长度的元素被删除.resize(int num, elem);
//重新指定容器的长度为num,若容器变长,则以elem值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除注意与vector的区别:
.capacity()
“容量”,因为内部结构没有容量限制,可以无限扩展dequed(10, 9); cout << d.size() << endl;//10 d.resize(3); cout << d.size() << endl;//3 cout << d.empty() << endl;//0
总结:
.empty()
.size()
.resize()
两端插入操作:
.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();
//清空容器内所有数据.eraser(beg,end);
//删除[beg,end)区间的数据,返回下一个数据的位置.erase(pos);
//删除pos位置的数据,返回下一个数据的位置注意:
#include#includeusing namespace std; void Print(const deque& d) { for (deque::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it << " "; } cout << endl; } int main() { dequed; cout << *d.insert(d.begin(), 1) << endl; d.insert(d.begin(), d.begin(), d.end()); d.insert(d.begin(), 2, 2); Print(d); //删除 deque::iterator it = d.begin(); it += 2;//指向第三个元素 d.erase(d.begin()+2); Print(d); return 0; }
.at(int idx);
//返回索引idx
所指的数据operator[];
//返回索引idx
所指的数据.front();
//返回容器中第一个元素的数据.back();
//返回容器中最后一个元素的数据dequed; for (int i = 0; i < 10; i++) { //不能用下标或at添加新元素 d.push_back(i); } for (int i = 0; i < 10; i++) { cout << d[i] << " "; } cout << endl << d.front() << d.back() << endl;
sort(iterator beg, iterator end);
//对beg和end区间内的元素进行排序
sort算法非常实用,使用时包含头文件algorithm
即可
#include#include#includeusing namespace std; void Print(const deque& d) { for (deque::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it << " "; } cout << endl; } int main() { dequed; for (int i = 0; i < 10; i++) { d.push_back(20-i); } Print(d); sort(d.begin(), d.end()); Print(d); return 0; }
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者