C++进阶-3-3deque容器

  1 #include<iostream>
  2 #include<deque>
  3 #include<algorithm>
  4 using namespace std;
  5 
  6 // deque 容器
  7 
  8 void printDeque(deque<int>& d) {
  9     for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
 10         cout << *it << " ";
 11     }
 12     cout << endl;
 13 
 14 }
 15 
 16 // 1. 构造函数
 17 void test01() {
 18 
 19     deque<int> d1;
 20     for (int i = 0; i < 10; i++) {
 21         d1.push_back(i);
 22     }
 23     printDeque(d1);
 24 
 25     deque<int> d2(d1.begin(), d1.end());
 26     printDeque(d2);
 27 
 28     deque<int> d3(10, 100);
 29     printDeque(d3);
 30 
 31     deque<int> d4(d3);
 32     printDeque(d4);
 33 }
 34 
 35 // 2.deque赋值操作
 36 void test02() {
 37 
 38     deque<int> d1;
 39     for (int i = 0; i < 10; i++) {
 40         d1.push_back(i);
 41     }
 42     printDeque(d1);
 43 
 44     // operator= 赋值
 45     deque<int>d2;
 46     d2 = d1;
 47     printDeque(d2);
 48 
 49     // assign 赋值
 50     deque<int> d3;
 51     d3.assign(d1.begin(), d1.end());
 52     printDeque(d3);
 53 
 54     deque<int> d4;
 55     d4.assign(10, 100);
 56     printDeque(d4);
 57 
 58 }
 59 
 60 // 3.deque大小操作
 61 void test03() {
 62 
 63     deque<int> d1;
 64     for (int i = 0; i < 10; i++) {
 65         d1.push_back(i);
 66     }
 67     printDeque(d1);
 68 
 69     if (d1.empty()) {
 70         cout << "d1为空!" << endl;
 71     }
 72     else {
 73         cout << "d1不为空" << endl;
 74         cout << "d1的大小为:" << endl;
 75         // deque容器没有容量概念
 76     }
 77 
 78     d1.resize(15);
 79     printDeque(d1);
 80 
 81     d1.resize(18, 4);
 82     printDeque(d1);
 83 
 84     d1.resize(5);
 85     printDeque(d1);
 86 }
 87 
 88 // 4.deque插入和删除
 89 void test04() {
 90 
 91     // 两端操作
 92     cout << "两端操作:" << endl;
 93     deque<int> d1;
 94 
 95     // 尾插
 96     d1.push_back(10);
 97     d1.push_back(20);
 98     // 头插
 99     d1.push_front(100);
100     d1.push_front(200);
101 
102     printDeque(d1);
103 
104     // 尾删
105     d1.pop_back();
106     printDeque(d1);
107     // 头删
108     d1.pop_front();
109     printDeque(d1);
110 
111     cout << endl;
112 
113 
114     // 指定位置操作
115     cout << "指定位置操作:" << endl;
116     deque<int>d2;
117     d2.push_back(10);
118     d2.push_back(20);
119     d2.push_back(30);
120     d2.push_back(40);
121 
122     printDeque(d2);
123 
124     // insert 插入
125     d2.insert(d2.begin(), 1000);
126     printDeque(d2);
127     
128     d2.insert(d2.begin(), 2, 800);
129     printDeque(d2);
130 
131     d2.insert(d2.begin(), d1.begin(),d1.end());
132     printDeque(d2);
133 
134     cout << endl;
135 
136     // 删除操作
137     cout << "删除操作!" << endl;
138     deque<int>::iterator it = d2.begin();
139     it++;
140     d2.erase(it);
141     printDeque(d2);
142 
143     d1.erase(d1.begin(), d1.end());
144     printDeque(d1);
145 
146     d1.clear();
147     printDeque(d1);
148 
149 }
150 
151 // 5.deque数据存取
152 void test05() {
153 
154     deque<int>d;
155     d.push_back(10);
156     d.push_back(20);
157     d.push_back(30);
158     d.push_back(100);
159     d.push_back(200);
160     d.push_back(300);
161 
162     // 通过 [] 访问元素
163     for (int i = 0; i < d.size(); i++) {
164         cout << d[i] << " ";
165     }
166     cout << endl;
167 
168     // 通过 at 访问元素
169     for (int i = 0; i < d.size(); i++) {
170         cout << d.at(i) << " ";
171     }
172     cout << endl;
173 
174     cout << "第一个元素为:" << d.front() << endl;
175     cout << "最后一个元素:" << d.back() << endl;
176 
177 }
178 
179 // deque排序
180 void test06() {
181 
182     deque<int>d;
183     d.push_back(10);
184     d.push_back(20);
185     d.push_back(30);
186     d.push_front(100);
187     d.push_front(200);
188     d.push_front(300);
189 
190     printDeque(d);
191 
192     // 排序 默认排序规则:从小到大,升序
193     // 对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序;
194     sort(d.begin(), d.end());
195     cout << "排序后:" << endl;
196     printDeque(d);
197 
198 }
199 
200 int main() {
201 
202     // 1. 构造函数
203     //test01();
204 
205     // 2. 赋值操作
206     //test02();
207 
208     // 3.大小操作
209     //test03();
210 
211     // 4.插入和删除
212     //test04();
213 
214     // 5.数据存取
215     //test05();
216 
217     // 6.deque排序
218     test06();
219 
220     system("pause");
221 
222     return 0;
223 }
224 
225 // 总结
226 // 
227 // deque 容器
228 // 
229 // 功能 :双端数组,可以对头端进行插入删除操作
230 // 
231 // deque与vector区别:
232 //    vector对于头部的插入删除效率低,数据量越大,效率越低
233 //    deque相对而言,对头部的插入删除速度会比vector快
234 //    vector访问元素时的速度会比deque快,这和两者内部实现有关
235 // 
236 // deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
237 // 中控器维护的是每个缓冲区的地址,是的使用deque时像是一片连续的内存空间
238 // 
239 // deque容器的迭代器也是支持 随机访问 的
240 // 

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/LYH-win/p/16242819.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!