C++ Primer-------vector

vector是标准库类型,表示对象的集合,其中所有对象的类型都相同。集合中每个对象都有一个索引,用于访问对象。
头文件:<vector>
命名空间:std::vector
vector是一个类模板,模板本身不是类或函数,可以看作编译器生成类或函数的一份说明。编译器根据模板创建类或函数过程叫做实例化。

1. vector实例化

vector<int>  vec;   //保存int类型的对象
        vector<vector<int>> veci;  //c++11   该向量元素是int的向量对象

注意:vector能容纳大多数类型的对象作为元素,但是引用因为不是对象,所以不能作为元素。

1.1 元素为vector类型

若组成vector的类型也是vector,在早期版本标准中其定义的形式和现在c++11不同,过去必须在外围vector对象的右尖括号和元素类型之间加一个空格。

 vector<vector<int>> veci;  //c++11   该向量元素是int的向量对象
  vector<vector<int> > veci;  // 旧版本  该向量元素是int的向量对象

2. 定义和初始化vector对象

vector <T> v1;  //v1是一个空vector,执行默认处初始化
vector<T> v2(v1);  //v2包含v1所有元素
vector<T> v2=v1;     //与上个等价
vector<T> v3(n,val);  //包含n个值为val的重复元素。
vector<T> v4(n);  //包含n个执行默认初始化的对象
vector<T> v5{a,b,c...}    //包含初始化值分别为a,b,c...的元素
vector<T> v5={a,b,c...}  //与上个等价

注意:最常见的定义方式是先定义一个空vector,然后当运行时添加元素。

2.1 列表初始化vector对象(C++11)

C++11新标准提供一种vector对象的元素赋初值的方法,列表初始化。

vector<string> astr={"a","bc","def" };  

包含了三个元素,也就是目前astr的size大小为3。
注意:若定义时需要提供初始值,则:
使用拷贝初始化(使用=)则只能提供一个初始化值,若提供类内的初始化值,只能使用拷贝或花括号,不能使用小括号。

vector<string> astr="a";
vector<string> astr={"a","b"};
vector<string> astr=("a","b");  //错误
vector<string> astr("a","b");//错误
2.1.1列表初始化值还是初始化元素数量
  1. 如果用圆括号,则括号内值用来构造vector对象,若用花括号,则表示列表初始化值。
vector<int> v1(10);//v1又10个元素,值为0
vector<int> v2{10};//v2有一个元素,值为10
vector<int> v1(10,1);//v1有10个元素,值为1
vector<int> v2{10,1};//v2有2个元素,值为10和1
  1. 若花括号内值和vector元素类型不匹配,则尝试用来构造vector对象。
vector<string> v1{"he"}; //列表初始化,v1有一个元素,值为“he”
vector<string> v2("he");  //错误,不能使用圆括号初始化值
vector<string> v3{10}; //v3有10个元素,值都为空
vector<string> v4{10,"he"};  //v4有10个元素,值都为“he”

2.2 创建指定数量元素

vector<string> astr(10,"b");//创建10个string类型的元素,其值都是“b”

3. 向vector中添加元素

vector<int> v2;
v2.push_back(2);  //向v2末尾添加一个元素 ,其值为2.

注意:如果循环体内部包含向vector对象添加元素的语句,则不能使用范围for循环,因为此时vector的大小是变化的。
不能用下标形式添加元素,下标必须对确知存在的元素使用下标。
为了防止越界,最好的方法就是使用范围for语句循环。

其他vector操作

v.empty()    //判断是否为空,是返回true
v.at(n);//访问位置n的元素
v.size();    //返回大小,返回值类型为无符号整数型
v.push_back(t);   //插入元素t,大小增加1
v[n];    //返回v中n位置上元素的引用
v1=v2;   //拷贝v2到v1
v1={a,b,c...}  // 列表初始化值
v1==v2   //当所有元素都相等则真
v1!=v2     //顾名思义
<,>,<=,>= //顾名思义

其他操作查看官网资料

4. 数组与vector

int a[]={1,2,3,4,3,2,1,2,1};
vector<int> b(a,a+9);//将数组中0到9的元素拷贝到vector
vector<int> c=(&a[0],&a[8]); //结果和上个一样

5. 迭代器遍历

for(vector<int>::iterator t=a.begin();t!=a.end();t++)  //定义一个vector<int>类型的迭代器,进行循环迭代 
	......
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值