摘要: 技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。
deque双向开口可进可出的容器
我们知道连续内存的容器不能随意扩充,因为这样容易扩充别人那去
deque却可以,它创造了内存连续的假象.
其实deque由一段一段构成 ,他是分段连续,而不是内存连续 当走向段的尾端时候自动跳到下一段 所以支持迭代器++ 操作,自动跳到下一段的方法由operator++实现
deque每次扩充 申请一个段
一 定义
头文件 #include <deque>
int main_0() { //默认构造函数 创建一个空的deque deque<int> c; //拷贝构造 deque<int> c1(c); //赋值拷贝 deque<int> c2 = c1; //指定元素个数创建 deque<int> c3 (5,6); for (auto i : c3) { cout<< i << ","; } cout << "deque(个数, 元素)"<<endl; //指定区间创建 deque<int> c4(c3.begin()+2, c3.begin()+3); for (auto i : c4) { cout<< i << ","; } cout << "deque(区间, 区间)"<<endl; //指定初始化列表创建 deque<int> c5({2,3,4,5}); for (auto i : c5) { cout<< i << ","; } cout << "deque({})"<<endl; //指定初始化列表创建 deque<int> c6 = {2,3,4,5}; for (auto i : c6) { cout<< i << ","; } cout << "deque = {}" <<endl; cout<<endl; return 0; }
二 操作
int main() { deque<int> c = {1,2,3,4,5}; deque<int> c1; // 赋值初始化 c1.assign(c.begin(),c.end()); for (auto i: c1) { cout<< i << ","; } cout << "assign()" <<endl; //在尾部插入 c1.push_back(6); for (auto i: c1) { cout<< i << ","; } cout << "push_back()" <<endl; //头插入 c1.push_front(0); for (auto i: c1) { cout<< i << ","; } cout << "push_front()" <<endl; //弹尾元素 c1.pop_back(); for (auto i: c1) { cout<< i << ","; } cout << "pop_back()" <<endl; //弹头元素 c1.pop_front(); for (auto i: c1) { cout<< i << ","; } cout << "pop_front()" <<endl; //指定位置插入元素 c1.insert(c1.begin()+3, 10); for (auto i: c1) { cout<< i << ","; } cout << "insert()" <<endl; //删除指定位置元素 c1.erase(c1.begin()+3); for (auto i: c1) { cout<< i << ","; } cout << "erase()" <<endl; //清空deque c.clear(); for (auto i: c) { cout<< i << ","; } cout << "clear()" <<endl; //构造 c1.emplace(c1.end(), 100); for (auto i: c1) { cout<< i << ","; } cout << "emplace()" <<endl; //头位置插入元素 c1.emplace_front(111); for (auto i: c1) { cout<< i << ","; } cout << "emplace_front()" <<endl; //尾位置插入元素 c1.emplace_back(111); for (auto i: c1) { cout<< i << ","; } cout << "emplace_back()" <<endl; //交换 c.swap(c1); for (auto i: c) { cout<< i << ","; } cout << "swap()" <<endl; int tmp; tmp = c.front(); cout<<"第一个元素"<< tmp << endl; tmp = c.back(); cout<<"最后一个元素"<< tmp << endl; tmp = c.at(1); cout<<"指定下标元素"<< tmp << endl; tmp = c[1]; cout<<"指定[]下标元素"<< tmp << endl; return 0; }
三 内存
int main() { deque<int> c = {1,2,3,4,5}; //元素个数 cout<< "size(): " << c.size() <<endl; //重新设定deque大小 少退多补 c.resize(10, 5); for(auto i : c) { cout << i <<","; } cout << "resize()" << endl; //最大容量 cout << "max_size(): " << c.max_size() <<endl; //是否为空 cout << "empty: " << c.empty() << endl; //清空内存 c.shrink_to_fit(); return 0; }
五 与迭代器操作
int main() { deque<int> c = {1,2,3,4,5}; //指向第一个元素的迭代器 cout << *c.begin() << endl; //指向最后一个元素的下一个位置的迭代器 cout << *c.end() << endl; //反向deque的第一个元素的迭代器 cout << *c.rbegin() << endl; //反向deque的第一个元素的上一个位置迭代器 cout << *c.rend() << endl; //指向第一个元素的迭代器 cout << *c.cbegin() << endl; //指向最后一个元素的下一个位置的迭代器 cout << *c.cend() << endl; //反向deque的第一个元素的迭代器 cout << *c.crbegin() << endl; //反向deque的第一个元素的上一个位置迭代器 cout << *c.crend() << endl; return 0; }
时间: 2024-10-17 13:15:34