STL—— 容器(vector)的内存分配,声明时的普通构造&带参构造
vector 的几种带参构造 & 初始化与内存分配:
1. 普通的带参构造:
vector 的相关对象可以在声明时通过 vector 的带参构造函数进行内存分配,如下:
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 //vector 带参构造,分配10个int空间的内存
9 vector<int>num(10);
10
11 cout << "num 的元素个数:" << num.size() << endl;
12 cout << "num 容器的大小:" << num.capacity() << endl;
13
14 for (int i = 0; i < num.size(); i++)
15 {
16 cout << num[i] << endl;
17 }
18
19
20 return 0;
21 }
打印结果:

这种情况便可以通过下标直接访问了。
1 vector<int> num(10);
2
3 num[0] = 1; //可以通过下标访问
4 num[1] = 2;
带参构造时也可以对内存的初始化,方法如下:
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 //vector 带参构造,分配10个int空间的内存,并且将值都初始化为666
9 vector<int>num(10, 666);
10
11 cout << "num 的元素个数:" << num.size() << endl;
12 cout << "num 容器的大小:" << num.capacity() << endl;
13
14 num[0] = 1;
15 num[1] = 2;
16
17 for (int i = 0; i < num.size(); i++)
18 {
19 cout << num[i] << endl;
20 }
21
22 return 0;
23 }
打印结果:

2. 使用其他 vector 进行带参构造
使用其他 vector 对象当做参数进行构造,如下代码:
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 vector<int>num(10, 666);
9 //用 num 当做参数构造 num_1
10 vector<int>num_1(num);
11
12 num[0] = 1;
13 num[1] = 2;
14
15 printf("num的值:\n");
16 for (int i = 0; i < num.size(); i++)
17 {
18 cout << num[i] << endl;
19 }
20 printf("num_1的值:\n");
21 for (int i = 0; i < num_1.size(); i++)
22 {
23 cout << num_1[i] << endl;
24 }
25 return 0;
26 }
打印结果:

3. 使用其他 vector 对象的迭代器进行带参构造:
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 vector<int>num(10, 666);
9
10 //用 num 的迭代器当做参数构造 num_1,迭代器返回的值可以进行 + - 运算
11 vector<int>num_1(num.begin() + 5, num.end());
12
13 num[0] = 1;
14 num[1] = 2;
15
16 printf("num的值:\n");
17 for (int i = 0; i < num.size(); i++)
18 {
19 cout << num[i] << endl;
20 }
21 printf("num_1的值:\n");
22 for (int i = 0; i < num_1.size(); i++)
23 {
24 cout << num_1[i] << endl;
25 }
26 return 0;
27 }
打印结果:
用 num.begin() + 5 至 num.end() 之间的参数对 num_1 进行构造

借用迭代器的概念,我们也可以使用数组来对 vector 进行带参构造,如下:
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 1,2,3,4,5 };
9 vector<int>num(test, test + 2);
10
11 printf("num的值:\n");
12 for (int i = 0; i < num.size(); i++)
13 {
14 cout << num[i] << endl;
15 }
16
17 return 0;
18 }
打印结果:

=========================================================================================================================
STL—— 容器(vector)的内存分配,声明时的普通构造&带参构造的更多相关文章
- STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值
1. 默认构造 set<int> setInt; //一个存放int的set容器. set<float> setFloat; //一 ...
- [C++]STL容器Vector的内存释放
直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- 从零开始写STL—容器—vector
从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...
- vector的内存分配机制分析
该程序初步演示了我对vector在分配内存的时候的理解.可能有误差,随着理解的改变,改代码可以被修改. /* 功能说明: vector的内存分配机制分析. 代码说明: vector所管理的内存地址是连 ...
- Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)
(一)Eclipse中的快捷键: ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...
- vector的内存分配与释放
1. vector内存分配 <Effective STL>中"条款14":使用reserve来避免不必要的重新分配 关于STL容器,最神奇的事情之一是只要不超过它们的最 ...
- STL容器vector应用注意事项
[1]提前分配足够空间以免不必要的重新分配和复制代价 关于vector容器重新分配和复制及析构释放的代价,请参见随笔<STL容器之vector>. 应用示例对比代码如下: #include ...
- STL源代码剖析(一) - 内存分配
Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...
随机推荐
- 美团 Java 面试 154 道题分享!
Java集合22题 ArrayList 和 Vector 的区别. 说说 ArrayList,Vector, LinkedList 的存储性能和特性. 快速失败 (fail-fast) 和安全失败 ( ...
- SecureCRT下载和安装
1.下载地址在我的百度网盘中 链接:https://pan.baidu.com/s/1tscAAS7QnWEQMNtnvGGI_A 提取码:exp9 2.解压后,运行 选中SecureCRT运行程序 ...
- Integer 错误的加锁
多线程同时访问一个Integer加锁的问题,程序运行和想要的结果相差甚远,让我百思不得其解,就下来研究了一下: 在进行多线程同步时,加锁是保证线程安全的重要手段之一.synchronized是大多数程 ...
- 工作一年半被裁掉,机缘巧合拿到阿里P7offer,得亏我看过这份“突击”面试宝典
前言 不论是校招还是社招都避免不了各种⾯试.笔试,如何去准备这些东⻄就显得格外重要.不论是笔试还是⾯试都是有章可循的,我这个"有章可循"说的意思只是说应对技术⾯试是可以提前准备,所 ...
- MyBatis学习01
1.初识MyBatis 环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 什么是M ...
- 使用ABBYY FineReader 手动校正文档复杂结构
ABBYY FineReader 15(Windows系统)拥有强大的OCR识别功能,能对扫描仪或者数码相机等光学工具获取的图像进行识别,解析其中的文本.图像.表格.条形码等,方便用户进一步获取图像中 ...
- guitar pro系列教程(二):Guitar Pro主界面之记谱功能的详细解析【下】
本章节我们接着上一章节继续讲解关于guitar pro主界面的记谱功能里的符号功能.有兴趣的朋友可以进来一起学习哦. 首先我们看下图,这是点击按钮便会弹出的一个窗口,进入这个窗口,我们会看到" ...
- Shamir秘密共享方案 (Python)
Shamir's Secret Sharing scheme is an important cryptographic algorithm that allows private informati ...
- Running Median POJ - 3784
本题使用对顶堆做法. 为了动态维护中位数,我们可以建立两个堆 :一个大根对,一个小根堆. 用法:在动态维护的过程中,设当前的长度为length,大根堆存从小到大排名 $1 \thicksim \dfr ...
- web服务器是啥
什么是web服务器 参考 https://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html 了解nginx之前,先了解下什么是web服务器吧 ...