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. rbd的增量备份和恢复

    前言 快照的功能一般是基于时间点做一个标记,然后在某些需要的时候,将状态恢复到标记的那个点,这个有一个前提是底层的东西没用破坏,举个简单的例子,Vmware 里面对虚拟机做了一个快照,然后做了一些系统 ...

  2. 使用 ffmpeg 命令直播推流

    CMD使用到的命令 D: -> 表示进入D盘cd /live -> 表示进入某个路径 执行条件 1.ffmpeg.exe 与视频放在同一目录下,纯英文目录2.执行以上命令进入到ffmpeg ...

  3. HotSpot类模型之InstanceKlass

    上一篇 HotSpot源码分析之类模型 介绍了类模型的基础类Klass的重要属性及方法,这一篇介绍一下InstanceKlass及InstanceKlass的子类. 1.InstanceKlass类 ...

  4. JavaScript正则学习笔记

    RegExp 元字符 ' . ' 点号:匹配任意的字符 ^ $ 位置字符 ^ 匹配字符串开始的位置 $ 匹配字符串结束的位置 匹配数字和非数字 \d 和 \D 匹配空白字符 \s 和 \S \s 匹配 ...

  5. Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~

    导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 当然啦, ...

  6. 图像分割必备知识点 | Dice损失 理论+代码

    本文包含代码案例和讲解,建议收藏,也顺便点个赞吧.欢迎各路朋友爱好者加我的微信讨论问题:cyx645016617. 在很多关于医学图像分割的竞赛.论文和项目中,发现 Dice 系数(Dice coef ...

  7. FL Studio中如何使用插件混杂功能中的琶音器

    琶音指一串和弦音从低到高或从高到低依次连续奏出,可视为分解和弦的一种.通常作为一种专门的技巧训练用于练习曲中,有时作为短小的连接句或经过句出现在乐曲旋律声部中.在Trance类型电子音乐中,琶音的运用 ...

  8. 【基于PUPPETEER前端自动化框架】【一】TypeScript+Puppeteer+Jest 整合

    前提:掌握Jest + Puppeteer 1.Jest环境配置 2.Jest-MATCHERS匹配器 3.Jest-全局变量设置 4.Puppeteer安装 5.Puppeteer元素获取 6.Pu ...

  9. 从Guarded Block来看Java中的wait和notify方法

    目录 预备知识 概览 线程同步 wait()方法 wait() wait(long timeout) wait(long timeout, int nanos) notify() & noti ...

  10. Matlab 条件循环函数

    条件判断 if 表达式 语句 elseif 表达式 语句 -. else 语句 end 这个与c语言不同的就是 1:要多一个end 2:还有没有括号 3:else if连在一起 for 循环 for ...