|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
The most profound statements are often said in silence.
Deque
功能:双端数组,可以对头端进行插入删除操作
deque与vector区别:
1、vector对于头部的插入删除效率低,数据量越大,效率越低;
2、deque相对而言,对头部插入删除的速度会比vector快;
3、vector访问元素时的速度会比deque快。
deque内部工作原理:
deque内部由个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据。
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
- #include<iostream>
- #include<deque>
- #include<algorithm>
- using namespace std;
- void printdeque(const deque<int>&d)
- {
- for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
- {
- cout << *it << " ";
- }
- cout << endl;
- }
- void test1()
- {
- deque<int>d1;
-
- for (int i = 0;i < 10; i++)
- {
- d1.push_back(i);
- }
- printdeque(d1);
-
- deque<int>d2(d1.begin(),d1.end());
- printdeque(d2);
-
- deque<int>d3(10,999);
- printdeque(d3);
-
- deque<int>d4(d3);
- printdeque(d4);
- }
- void test2()
- {
- deque<int>d1;
-
- for (int i = 0; i < 10; i++)
- {
- d1.push_back(i);
- }
- printdeque(d1);
-
- //operator= 赋值
- deque<int>d2;
- d2 = d1;
- printdeque(d2);
-
- //assign 赋值
- deque<int>d3;
- d3.assign(d1.begin(),d1.end());
- printdeque(d3);
-
- deque<int>d4;
- d4.assign(10,999);
- printdeque(d4);
- }
- void test3()
- {
- deque<int>d1;
-
- for (int i = 0;i < 10;i++)
- {
- d1.push_back(i);
- }
- printdeque(d1);
-
- if (d1.empty())
- {
- cout << "d1为空!!!!!!!" << endl;
- }
- else
- {
- cout << "d1不为空!!!!!!" << endl;
- cout << "d1的大小为: " << d1.size() << endl;
- //deque容器没有容量概念
- }
-
- //重新指定大小
- d1.resize(15);
- printdeque(d1);
-
- d1.resize(20,6);
- printdeque(d1);
-
- d1.resize(5);
- printdeque(d1);
- }
- void test4()
- {
- //插入和删除提供的位置是迭代器
- deque<int>d1;
-
- //尾插
- d1.push_back(22);
- d1.push_back(66);
-
- //头插
- d1.push_front(100);
- d1.push_front(200);
-
- printdeque(d1);//200 100 22 66
-
- //尾删
- d1.pop_back();
- printdeque(d1);//200 100 22
-
- //头删
- d1.pop_front();
- printdeque(d1);//100 22
-
- //insert 插入
- d1.insert(d1.begin(),1000);
- printdeque(d1);//1000 100 22
-
- d1.insert(d1.begin(),2,9999);
- printdeque(d1);//9999 9999 1000 100 22
-
- //按区间进行插入
- deque<int>d2;
- d2.push_back(1);
- d2.push_back(2);
- d2.push_back(3);
-
- d1.insert(d1.begin(),d2.begin(),d2.end());
- printdeque(d1); //1 2 3 9999 9999 1000 100 22
-
- //删除
- deque<int>::iterator it = d1.begin();
- it++;
- d1.erase(it);
- printdeque(d1);//1 3 9999 9999 1000 100 22
-
- //按区间方式删除
- d1.erase(d1.begin(),d1.end());
- d1.clear();
- printdeque(d1);
- }
- void test5()
- {
- deque<int>d1;
-
- d1.push_back(999);
- d1.push_back(888);
- d1.push_back(666);
- d1.push_front(111);
- d1.push_front(222);
- d1.push_front(333);
-
- //通过[]方式访问元素
- for (int i = 0; i < d1.size(); i++)
- {
- cout << d1[i] << " ";
- }
- cout << endl;
-
- //通过at方式访问元素
- for(int i = 0; i < d1.size(); i++)
- {
- cout << d1.at(i) << " ";
- }
- cout << endl;
-
- cout << "第一个元素为: " << d1.front() << endl;
- cout << "最后一个元素为: " << d1.back() << endl;
- }
- void test6()
- {
- deque<int>d1;
-
- d1.push_back(123);
- d1.push_back(234);
- d1.push_back(345);
- d1.push_front(890);
- d1.push_front(789);
- d1.push_front(678);
-
- printdeque(d1);
-
- //排序 从小到大 升序
- //对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
- //vector容器也可以利用sort()进行排序
- sort(d1.begin(),d1.end());
- cout << "排序后!!!!!!!!!" << endl;
- printdeque(d1);
- }
- int main()
- {
- test1();//deque构造函数
-
- test2();//deque赋值操作
-
- test3();//deque大小操作
-
- test4();//deque插入和删除
-
- test5();//deque数据存取
-
- test6();//deque排序
-
- return 0;
- }
复制代码
给你一个波
|
|