C++ Primer笔记(3.3.1 )—— 定义和初始化vector对象

C++ Primer笔记(3.3.1 )—— 定义和初始化vector对象

/********************************************************************/
/* 标准库类型vector表示对象的集合,其中所有对象的类型都相同。       */
/* 想要使用vector,必须包含适当的头文件。在后续的例子中,都将假定做 */
/* 了如下:using声明:                                              */
/*     #include<vector>                                             */
/*     using std::vector;                                           */
/*                                                                  */
/* vector是模板而非类型,由vector生成的类型必须包含vector中元素的类 */
/* 型,例如vector<int>。                                            */
/*                                                                  */
/* vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象, */
/* 所以不存在包含引用的vector。                                     */
/********************************************************************/

#include<iostream>
#include<string>
#include<vector>

using std::string;
using std::vector;

/*************************************************************************************************/
/*                                 初始化vector对象的方法                                        */
/*                                                                                               */
/*      vector<T> v1                 ------  v1是一个空vector,潜在的元素是T类型,执行默认初始化 */
/*      vector<T> v2(v1)             ------  v2中包含有v1所有元素的副本                          */
/*      vector<T> v2 = v1            ------  等价于v2(v1)                                        */
/*      vector<T> v3(n, val)         ------  v3包含了n个重复的元素,每个元素的值都为val          */
/*      vector<T> v4(n)              ------  v4包含了n个重复地执行了值初始化的对象               */
/*      vector<T> v5{a, b, c...}     ------  v5包含了初始值个数的元素,每个元素被赋予相应的初值  */
/*      vector<T> v5 = {a, b, c...}  ------  等价于 v5{a, b, c...}                               */
/*************************************************************************************************/

int main()
{
	/* ----- 例子 ----- */
	
	vector<string> svec;   //默认初始化,svec不含任何元素
	//看起来空vector好像没什么用,但事实上,最常见的方式就是先定义一个空vector,然后当运行时获取
	//到元素的值后再逐一添加

	//当然也可以在定义vector对象时指定元素的初始值。例如,允许把一个vector对象的元素拷贝给另外一个vector
	//对象。注意两个vector对象的类型必须相同
	vector<int> ivec;  //初始状态为空
	//在此处给ivec添加一些值
	vector<int> ivec2(ivec);  //把ivec的元素拷贝给ivec2
	vector<int> ivec3 = ivec;  //把ivec的元素拷贝给ivec3
	// vector<string> svec(ivec2);  //错误:svec的元素是string对象,不是int

	/* ---------------- */


	/* ----- 列表初始化vector对象 ----- */

	//C++11还提供了另外一种为vector对象的元素赋值的方法,即列表初始化
	vector<string> articles = {"a", "an", "the"};

	vector<string> v1{ "a", "an", "the" };
	//vector<string> v2( "a", "an", "the" ); //错误,要用{}

	/* -------------------------------- */


	/* ----- 创建指定数量的元素 ----- */

	//还可以用vector对象容纳的元素数量和所以元素的统一初始值来初始化vector
	vector<int> ivec4(10, -1);     //10个int类型的元素,每个都被初始化为-1
	vector<string> svec(10, "hi");  //10个string类型的元素,每个都被初始化为“hi”

	/* ------------------------------ */


	/* ----- 值初始化 ----- */

	//通常情况下,可以只提供vector对象容纳的元素数量而略去初始值。此时库会创建一个值初始化的元素初值,
	//并把它赋给容器中的所有元素。这个初始值由vector对象中的元素类型决定。
	vector<int> ivec5(10);    //10个元素,每个都初始化为0
	vector<string> svec2(10); //10个元素,每个都是空string对象

	/* -------------------- */


	/* ----- 列表初始值还是元素数量? ----- */

	//在某些情况下,初始化的真实含义依赖于传递初始值时用的是花括号还是圆括号。
	//例如,用一个整数来初始化vector<int>时,整数的含义可能是vector对象的容量也可能是元素的值。
	vector<int> ve1(10);       //ve1有10个元素,每个值为0
	vector<int> ve2{ 10 };     //ve2有1个元素,值为10

	vector<int> ve3(10, 1);    //ve3有10个元素,每个的值都是1
	vector<int> ve4{ 10, 1 };  //ve4有2个元素,值分别是10和1


	//另一方面,如果初始化时使用了花括号的形式但是提供的值又不能用来列表初始化,
	//就要考虑用这样的值来构造vector对象了。
	vector<string> ve5{ "hi" };  //列表初始化:ve5有一个元素
	// vector<string> ve6("hi"); //错误:不能使用字符串字面值构建vector
	vector<string> ve7{ 10 };    //ve7有10个默认初始化的元素
	vector<string> ve8{ 10, "hi" };  //ve8有10个值为“hi”的元素

	/* ------------------------------------ */

	return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire丶Chicken

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值