1 //vector  容器构造  vector赋值操作  vector 容量大小  vector插入和删除
2 //vector数据存取 vector互换容器 vector预留空间
3 #include<iostream>
4 #include<string>
5 #include<vector>
6
7 using namespace std;
8
9 //打印
10 void printVector(vector<int> &v)
11 {
12 for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
13 {
14 cout << *it << " ";
15 }
16 cout << endl;
17 }
18 //vector 容器构造
19 void test01()
20 {
21 vector<int>v1; //默认构造 无参构造
22 for (int i = 0; i < 10; i++)
23 {
24 v1.push_back(i);
25 }
26
27 printVector(v1);
28
29 //通过区间的方式进行构造
30
31 vector<int>v2(v1.begin(), v1.end());
32 printVector(v2);
33
34 //N个elem方式构造
35 vector<int>v3(10, 100);
36 printVector(v3);
37
38
39 //拷贝构造
40 vector<int>v4(v3);
41 printVector(v4);
42
43 }
44 //打印
45 void printVector1(vector<int>&v1)
46 {
47 for (vector < int>::iterator it = v1.begin(); it != v1.end();it++)
48 {
49 cout << *it << " ";
50 }
51 cout << endl;
52 }
53
54 //vector 赋值
55 void test02()
56 {
57 vector<int>v1;
58 for (int i = 0; i < 10; i++)
59 {
60 v1.push_back(i);
61 }
62 printVector1(v1);
63 //赋值 operator=
64 vector<int>v2;
65 v2 = v1;
66 printVector1(v2);
67
68 //assign
69 vector<int>v3;
70 v3.assign(v2.begin(), v2.end());
71 printVector(v3);
72
73 //n个elem 方式赋值
74 vector<int>v4;
75 v4.assign(10, 100);
76 printVector(v4);
77
78 }
79
80 //打印
81 void printVector3(vector<int>& v3)
82 {
83 for (vector<int>::iterator it = v3.begin(); it != v3.end(); it++)
84 {
85 cout << *it << " ";
86 }
87 cout << endl;
88 }
89
90 //vector 容量大小
91 void test03()
92 {
93 vector<int>v3;
94 for (int i = 0; i < 10; i++)
95 {
96 v3.push_back(i);
97 }
98 printVector3(v3);
99
100 if (v3.empty()) //为真 代表容器为空
101 {
102 cout << "v3为空!" << endl;
103 }
104 else
105 {
106 cout << "V3不为空!" << endl;
107 cout << "v3的容量为: " << v3.capacity() << endl;
108 cout << "v3的大小为:" << v3.size() << endl;
109
110 }
111 //重新指定大小
112 v3.resize(15,10);//利用重载的版本 可以指定默认填充的值,参数2
113 printVector3(v3); //如果重新指定的过长 默认用0填充新的位置
114
115
116 v3.resize(5);
117 printVector3(v3); //如果重新指定的过短,就会删除超出的部分
118
119 }
120
121
122 //打印
123 void printVector4(vector<int>& v4)
124 {
125 for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
126 {
127 cout << *it << " ";
128 }
129 cout << endl;
130 }
131
132 //vector 插入和删除
133 void test04()
134 {
135 vector <int>v4;
136 //尾插
137 v4.push_back(10);
138 v4.push_back(20);
139 v4.push_back(30);
140 v4.push_back(40);
141 v4.push_back(50);
142
143 //遍历
144 printVector4(v4);
145
146 //尾删
147 v4.pop_back();
148 printVector4(v4);
149
150 //插入第一个 第一个参数就是迭代器
151 v4.insert(v4.begin(), 100);
152 printVector4(v4);
153
154 //插入两个 55 在开头
155 v4.insert(v4.begin(), 2, 55);
156 printVector4(v4);
157
158 //删除 开头删除了第一个 参数 迭代器
159 v4.erase(v4.begin());
160 printVector4(v4);
161
162 //删除 区间方式 类似 清空
163 //v4.erase(v4.begin(), v4.end()); // 全部删除
164 //printVector4(v4);
165
166 //清空
167 v4.clear();
168 printVector4(v4);
169 }
170
171
172 //vector数据存取
173 void test05()
174 {
175 vector<int>v5;
176 for (int i = 0; i < 10; i++)
177 {
178 v5.push_back(i);
179 }
180
181 //利用[]的方式访问数组中的元素
182 for (int i = 0; i < v5.size(); i++)
183 {
184 cout << v5[i] << " ";
185 }
186 cout << endl;
187
188 //利用at方式访问元素
189 for (int i = 0; i < v5.size(); i++)
190 {
191 cout << v5.at(i) << " " ;
192 }
193 cout << endl;
194
195 //返回第一个元素
196 cout << "第一个元素为:" << v5.front() << endl;
197
198 //获取最后一个元素
199 cout << "最后一个元素为:" << v5.back() << endl;
200 }
201
202
203 //打印
204 void printVector6(vector<int>& v6)
205 {
206 for (vector<int>::iterator it = v6.begin(); it != v6.end(); it++)
207 {
208 cout << *it << " ";
209 }
210 cout << endl;
211 }
212
213 //vector互换容器
214 //1.基本使用
215 void test06()
216 {
217 vector<int>v6;
218 for (int i = 0; i < 10; i++)
219 {
220 v6.push_back(i);
221 }
222 cout << "交换前打印!!!" << endl;
223 printVector6(v6);
224
225 vector<int>v7;
226
227 for (int i = 10; i > 0; i--)
228 {
229 v7.push_back(i);
230 }
231 printVector6(v7);
232
233
234 cout << "交换后:!!!!!!!!!!" << endl;
235
236 v6.swap(v7);
237 printVector6(v6);
238 printVector6(v7);
239
240 }
241
242 //2.实际用途
243 //巧用swap可以收缩内存空间
244 void test07()
245 {
246 vector<int>v;
247 for (int i = 0; i < 100000; i++)
248 {
249 v.push_back(i);
250 }
251
252 cout << "第一次v的容量为:" << v.capacity() << endl;
253 cout << "第一次v的大小:" << v.size() << endl;
254
255
256 v.resize(3); //重新指定大小
257 cout << "第二次v的容量为:" << v.capacity() << endl;
258 cout << "第二次v的大小:" << v.size() << endl;
259
260 //巧用swap收缩内存 // vector<int>(v) 匿名对象执行完就被系统回收
261 vector<int>(v).swap(v);
262
263 cout << "第三次v的容量为:" << v.capacity() << endl;
264 cout << "第三次v的大小:" << v.size() << endl;
265 }
266
267
268 //预留空间 reserve(int len);
269 void test08()
270 {
271 vector<int>v8;
272 //利用reserve预留空间
273 v8.reserve(100000);
274
275 int num = 0; //统计开辟次数
276 int* p = NULL;
277 for (int i = 0; i < 10000; i++)
278 {
279 v8.push_back(i);
280
281 if (p != &v8[0])
282 {
283 p = &v8[0];
284 num++;
285 }
286 }
287 cout << "num = " << num << endl;
288 }
289
290
291 int main()
292 {
293 test01();
294
295 test02();
296
297 test03();
298
299 test04();
300
301 test05();
302
303
304 test06();
305 test07();
306
307 test08();
308
309 system("pause");
310 return 0;
311 }

C++ //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 //vector数据存取 vector互换容器 vector预留空间的更多相关文章

  1. 重点:QObject 的拷贝构造和赋值操作——私有

    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...

  2. QObject 的拷贝构造和赋值操作

    QOject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承自 ...

  3. kubernetes给容器生命周期设置操作事件

    Kubernetes支持预启动和预结束事件. Kubernetes在容器启动的时候发送预启动事件,在容器结束的时候发送预结束事件. 定义预启动和预结束事件操作 下面是Pod的配置文件: # cat l ...

  4. C++标准库vector类型的使用和操作总结

    vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...

  5. vector 与map的下标操作

    1.vector的下标操作不会添加元素,只能针对已经存在的元素操作. 2.map的下标操作具有副作用,key不存在,会在map中添加一个具有该key的新元素,新元素的value使用默认构造方法. 3. ...

  6. 实战c++中的vector系列--构造、operator=和assign差别

    vector或许是实际过程中使用最多的stl容器.看似简单,事实上有非常多技巧和陷阱. 着重看一看vector的构造,临时依照C++11: default (1) explicit vector (c ...

  7. R: vector 向量的创建、操作等。

    ################################################### 问题:创建.操作向量   18.4.27 怎么创建向量 vector,,及其相关操作 ??? 解 ...

  8. STL——容器(Map & multimap)的拷贝构造与赋值

    1. Map & multimap 的拷贝构造与赋值 map(const map &mp);               //拷贝构造函数 map& operator=(con ...

  9. STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值

    1. 默认构造 set<int> setInt;              //一个存放int的set容器. set<float> setFloat;          //一 ...

  10. Effective C++笔记:构造/析构/赋值运算

    条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函 ...

随机推荐

  1. 【JS 逆向百例】XHR 断点调试,Steam 登录逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:Steam ...

  2. CLion搭建Qt开发环境,并解决目录重构问题(最新版)

    序言 Qt版本不断更新,QtCreator也不断更新.在Qt4和Qt5时代,我一直认为开发Qt最好的IDE就是自带的QtCreator,可是时至今日,到了Qt6时代,QtCreator已经都12.0. ...

  3. Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加文本

    项目地址: Pdfium.Net:https://github.com/1000374/Pdfium.Net PdfiumViewer:https://github.com/1000374/Pdfiu ...

  4. 山泽Typec扩展坞M.2移动固态硬盘盒拓展 - 我的硬件配置

  5. U390630 分考场题解

    题目链接:U390630 分考场 本题来自于2019年蓝桥杯国赛的题.在洛谷上也被标为了假题.原因是首先官方在需要输出浮点数的情况下,并没有开启spj,并且官方所给的数据当中,总有一两个数据以不知道到 ...

  6. Hive-分区取TOP N问题

    问题背景 设想你对用户在不同品类上的行为打分聚合后得到这样一个表 user_cate_score uid cate score 1 1 0.3 2 2 0.5 8 3 0.9 现在,你想将每个品类的T ...

  7. 2023年多校联训NOIP层测试1

    2023年多校联训NOIP层测试1 T1 luogu P6882 [COCI2016-2017#3] Imena \(50pts\) 赛场上被如何输入和判断是否合法薄纱了,赛后发现还有数字这一说,而且 ...

  8. Kafdrop

    Kafdrop 是一个用于查看 Kafka 主题和浏览消费者组的 Web UI docker run -d --rm -p 9000:9000 \ -e KAFKA_BROKERCONNECT=hos ...

  9. OpenStack调度器

    计算使用 nova-scheduler 服务来确定如何调度计算请求 默认配置中,调度程序会考虑以下所有条件的主机: 位于请求的可用区 (map_az_to_placement_aggregate) 放 ...

  10. MySQL5.7的账号回收权限

    因MySQL无排除表权限功能,测试隔离表回收权限以下方案: 1,代理账号(角色)方案 方案:创建一个代理账号(角色),对库的800多张表逐个赋权,58张隔离表赋只读,其他30多个账号绑定到这个代理账号 ...