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() + 5num.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)的内存分配,声明时的普通构造&带参构造的更多相关文章

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

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

  2. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  3. (转)C++ STL中的vector的内存分配与释放

    C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...

  4. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  5. vector的内存分配机制分析

    该程序初步演示了我对vector在分配内存的时候的理解.可能有误差,随着理解的改变,改代码可以被修改. /* 功能说明: vector的内存分配机制分析. 代码说明: vector所管理的内存地址是连 ...

  6. Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)

    (一)Eclipse中的快捷键:  ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...

  7. vector的内存分配与释放

    1. vector内存分配 <Effective STL>中"条款14":使用reserve来避免不必要的重新分配 关于STL容器,最神奇的事情之一是只要不超过它们的最 ...

  8. STL容器vector应用注意事项

    [1]提前分配足够空间以免不必要的重新分配和复制代价 关于vector容器重新分配和复制及析构释放的代价,请参见随笔<STL容器之vector>. 应用示例对比代码如下: #include ...

  9. STL源代码剖析(一) - 内存分配

    Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...

随机推荐

  1. 关于重写equals同时重写hashcode

    1.Object中equals方法和hashcode public boolean equals(Object obj) { return (this == obj); } public native ...

  2. 学会网页制作,web app开发,必须先从语法基础开始学习

    做软件开发,是从事编程开发工作,必须先从语法基础开始学习,通过语法组成产品效果.      前端开发的基础语法,由HTML+CSS+JavaScript组成,这是前端开发最基本的3个语言.       ...

  3. python-基础入门-3(对文件操作)

    打开文件用open()函数 open(filename)默认为读取模式 等价于open(filename,'r') 1 txt=open(filename) 2 print txt.read() 3 ...

  4. C++中内存布局 以及自由存储区和堆的理解

    文章搬运自https://www.cnblogs.com/QG-whz/p/5060894.html,如有侵权请告知删除 当我问你C++的内存布局时,你大概会回答: "在C++中,内存区分为 ...

  5. 教你怎么设置Vegas渲染输出的选定范围

    在制作视频时,很多用户进行到渲染时,常常会发生这样那样的问题,导致导出的视频效果不甚理想.归结原因,还是用户在渲染输出时的选定范围存在问题. 接下来小编就为大家具体介绍下:vegas如何设置渲染输出的 ...

  6. guitar pro系列教程(二十七):Guitar Pro教程之理解记谱法

    前面的章节我们讲解了很多关于Guitar Pro'的功能使用,今天小编还是采用图文结合的方式为大家讲解它的理解记谱法,对于很多新人来说,在我们看谱之前,我们肯定要先熟悉他的一些功能如何使用以及一些关于 ...

  7. Gin + 七牛云对象存储

    配置七牛云存储 创建存储空间 拿到密钥 安装七牛云对象存储SDK 推荐go.mod安装 // 将下面地址复制到go.mod,然后执行go mod download github.com/qiniu/a ...

  8. vs2019 Com组件初探-简单的COM编写以及实现跨语言调用

    前提条件 1.掌握C++基础语法 2.平台安装 vs2019 3.本地平台为 windows 10 1909 X64 4.了解vbs基础语法 本次目标 1.掌握Com组件的概念及原理 2.编写一个简单 ...

  9. OllyDbg使用入门

    OllyDbg的四个窗口: http://www.360doc.com/content/16/0913/07/16447955_590419156.shtml 反汇编窗口:显示被调试程序的反汇编代码, ...

  10. mySQL初学者需要掌握的【数据库与表的基本操作】

    本内容会持续更新的哦! 注:"字段"="列","记录''="行" 文章目录 一:数据库的基本操作 二.数据表的基本操作 1.创建与 ...