草庐IT

C++进阶-3-2vector容器

LYH-win 2023-03-28 原文

C++进阶-3-2vector容器

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

 

有关C++进阶-3-2vector容器的更多相关文章

  1. 大家沉迷短视频无法自拔?Python爬虫进阶,带你玩转短视频 - 2

    大家好,我是辣条。现在短视频可谓是一骑绝尘,吃饭的时候、休息的时候、躺在床上都在刷短视频,今天给大家带来python爬虫进阶:美拍视频地址加密解析。短视频js逆向解析抓取目标工具使用重点学习内容项目思路解析抓取目标目标网址:美拍视频工具使用开发环境:win10、python3.7开发工具:pycharm、Chrome工具包:requests、xpath、base64重点学习内容爬虫采集数据的解析过程js代码调试技巧js逆向解析代码Python代码的转换项目思路解析进入到网站的首页挑选你感兴趣的分类根据首页地址获取到进入详情页面的超链接的跳转地址找到对应加密的视频播放地址数据这个数据是静态的网页

  2. 在保持文本不透明度的同时,可以使用仅使用HTML制作一个透明的容器? - 2

    我想在保持文本/图像不透明的同时使我的容器背景透明。只能使用HTML做到这一点吗?这是我的代码:看答案我看到了您的问题,如果我正确理解您,我想我知道您可以做什么。我注意到的一件事是,在我进一步走之前,看起来您正在使用引导程序代码。如果您更改了可能与此相关的CSS样式表,则可能会更好,更有效,也可能不会破坏整体代码的其他元素,但是让我们看看我的解决方案是否对您有效。基本上您想做的是:1)在您的HTML中编写一个“样式”标签,然后在其中放入样式(CSS)属性(您可以将其放入HTML代码的标题中以更好地跟踪它)。2)使用提供背景颜色的“RGBA”格式,并将其不透明度为“0”作为代码段的第四值。因此,

  3. ruby-on-rails - 使用 AWS Elastic Beanstalk 和 Ruby 容器设置私有(private) Github 访问 - 2

    经过recenttutorial关于使用Git为Ruby部署设置AWSElasticBeanstalk,我只是从我的CI服务器设置了一个ElasticBeanstalk环境。但是,应用程序无法启动。我查看日志发现bundleinstall失败并显示一条错误消息。Fetchinggit@github.com:example/private-repository.gitHostkeyverificationfailed.fatal:Theremoteendhungupunexpectedly[31mGiterror:commandgitclone'git@github.com:exampl

  4. vue2+element-ui,el-aside侧边栏容器收缩与展开 - 2

    一、概览实现效果如下:二、项目环境1、nodejs版本node-vv16.16.02、npm版本npm-vnpmWARNconfigglobal`--global`,`--local`aredeprecated.Use`--location=global`instead.8.15.03、vue脚手架版本vue-V@vue/cli5.0.8三、创建vue项目1、创建名为vuetest的项目vuecreatevuetest选择Default([Vue2]babel,eslint)  2、切换到项目目录,启动项目cdvuetestnpmrunserve 3、使用浏览器预览 http://localh

  5. ruby - 为什么我不能让 swig wrap std::vector 到 Ruby 类? - 2

    我有一个带有嵌入式Ruby解释器的应用程序,以及与swig生成的STL类的接口(interface)。多亏了swig,几乎所有事情都进行得很好,除了一件事:%moduleStuff%import"std_vector.i"namespacestd{%template(Vectord)vector;};%inline%{std::vectortest;%}当我尝试在Ruby中使用它时,类型Stuff::Vectord存在,但它不是生成的单例方法测试的返回类型。查看生成的C包装器文件,我可以看到类Vectord及其方法已定义,但查看_wrap_test_get我没有看到任何返回sth类St

  6. ruby - Ruby 有像栈、队列、链表、映射或集合这样的容器吗? - 2

    我在网上查了几个Ruby教程,他们似乎什么都用数组。那么如何在Ruby中实现以下数据结构呢?堆栈队列链表map组 最佳答案 (从评论中移出)好吧,通过限制堆栈或队列方法(push、pop、shift、unshift),数组可以是堆栈或队列。使用push/pop提供LIFO(后进先出)行为(堆栈),而使用push/shift或unshift/pop提供FIFO行为(队列)。map是hashes,和一个Set类已经存在。您可以使用类实现链表,但数组将使用标准数组方法提供类似于链表的行为。 关

  7. javascript - 选择容器中的最后一个词 - 2

    我只是想知道是否有办法选择DIV中的最后一个WORD。我认为没有任何明显的方法可以做到这一点,那么有什么变通办法吗?我不介意使用CSS或Javascript来实现这一点。提前致谢 最佳答案 或者没有,它归结为基本的字符串操作(使用match())方法。varwords=$('#your_div').text().match(/(\w+)/g);if(words.length){varlast_word=words[words.length-1];}我们使用match()构建所有单词的数组方法,然后获取最后一个(varlast_wor

  8. javascript - 使用 Knockout 组件时替换容器元素 - 2

    有没有办法配置Knockoutcomponent替换容器元素而不是将其内容嵌套在容器元素中?例如,如果我使用以下模板将自定义组件注册为my-custom-element:Helloworld!是否可以像这样使用组件:最终产品是这样的:Helloworld!而不是这样:(Knockout默认渲染组件的方式)Helloworld!Basedontheanswertothisquestion,似乎此功能内置于模板引擎中,我假设在呈现组件模板时也会使用它。有没有一种方法可以指定组件应该使用replaceNode的renderMode进行渲染?我知道“虚拟元素”语法,它允许在HTML注释中定义组

  9. javascript - ReactJS - ReactMount : Root element has been removed from its original container. 新容器 - 2

    这个错误是什么意思?如何解决?ReactMount:Rootelementhasbeenremovedfromitsoriginalcontainer.Newcontainer在这之后我得到了这个:Uncaughtobjectreact.js:15915invariantreact.js:15915ReactMount.findComponentRootreact.js:10584ReactMount.findReactNodeByIDreact.js:10480getNodereact.js:10089(anonymousfunction)react.js:7307(anonymou

  10. javascript - 在 docker 容器中安装 yarn 说缺少依赖 - 2

    我正在使用node:6.7.0图像作为我的docker容器,然后按照yarn的安装指南进行操作sudoapt-keyadv--keyserverpgp.mit.edu--recvD101F7899D41F3C3echo"debhttp://dl.yarnpkg.com/debian/stablemain"|sudotee/etc/apt/sources.list.d/yarn.list然后我做apt-getupdate&&apt-getinstallyarn但此时我收到一条错误消息,上面写着yarn:Depends:nodejs(>=4.0.0)butitisnotgoingtobei

随机推荐