C++ Primer学习 《Vectors》

Vectors

Vector也叫container(容器)

A vector is often referred to as a container because it "contains" other objects.

包含

#include <vector>
using std::vector;
以vector为元素的vector

vector<vector<int>> numList;//vector whose elements are vector
vector<vector<int> > numList;//老版本中要求int后的“> >”这个空格必须存在,新版则不必
vector不能以reference为元素

因为reference本身并不是object,所以不能有vector of reference。

定义和初始化Vector

vector<T> v1;
vector<T> v2(v1);
vector<T> v2 = v1;
vector<T> v3(n,val);//n个val
vector<T> v4(n);//n个default initialization value
vector<T> v5{a,b,c...};//c++ 11支持
vector<T> v5 = {a,b,c...};//c++ 11支持
值得一提的是最后两个使用{}(curly braces)初始化vector是c++ 11的新特性,这里不能使用() (parentheses)。这个特性被称为雷内初始化(in-class initializer)。类内初始化其实就是对C++标准库提供的一些列变量类型提供了初始化的功能,其形式必须是“{a,b,c...}”或是" = {a,b,c...}",而不能使用圆括号。有一点值得注意,使用类内初始化,所有变量形式必须一致,即:

vector<int> iv{1,2};//ok
vector<int> iv{1.0,2.0};//error! int和double

还有一点,如果你使用了"{}',但是compiler无法根据"{}"正确编译,那么它会将其转换成"()"再尝试编译,即:

vector<string> sv{10,"a"};//等价于(10,"a")
显然,我们应该减少这种情况发生。

为vector添加元素

大家都知道,往vector内添加元素使用push_back()函数。但很多人倾向于事先给vector设定好一个大小,然后使用"[]"来添加元素。C++ Primer告诉我们,vectors grow efficiently!除非所有vector需要相同的值,否则不要这么做,而应该使用push_back;使用push_back往往比先设定好大小,然后依次读入来的效率更高。

vector和range for

一般来说,range for配合vector非常好用。然而,如果range for中要改变vector的size,则是被禁止的。这是因为,这样range for就难以判定开始和结尾了。

实际测试中(使用VS2013),编译时不会报错,但运行时会报错:vector iteration not incrementable!

其他的vector操作

v.empty();//return true if empty; otherwise false
v.size();//return size_type
v.push_back(t);
v[n];
v1 = v2;
v1 = {a,b,c...};
v1 == v2;//类模板只能是标准库中的变量类型
v1 != v2;//同上
<,<=,>,>= //同上
还有值得一提的是,vector中的size_type这个变量类型,必须指明类模板才有效,即:

vector<int> ::size_type //ok
vector:: size_type //error!

使用Array初始化Vector

我们用array初始化array,也不能用vector初始化array,但可以用array初始化vector,which is very convenient!

int a[] = {1,2,3,4,5};
vector<int> v(begin(a),end(a));//v和a的元素完全一样
vector<int> v2(begin(a)+1,end(a)-1);//v包含2,3,4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值