C++学习——3.3标准库类型Vector

vector是一个类模板,模板本身不是函数或类,相反可以将模板看做编译器生成类或函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化

要使用vector,必须包含适当的头文件,后续都假定做了如下声明:

#include<vector>
using std::vector;

 1.定义和初始化vector对象

vector能容纳绝大多数的类型的对象作为其元素,但因为引用不是对象,所以不包含引用的vector

初始化vector对象的方法:

vector<T> v1; //v1是一个空vector,他的潜在元素是T类型的,执行默认初始化
vector<T> v2(v1); //v2中包含有v1所有元素的副本
vector<T> 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...}; //等价于上行

注意:如果使用的是圆括号,可以说提供的值是用来构造vector对象的;如果使用的是花括号,可以表述丞我们想列表初始化该vector对象。eg如下:

vector<int> v1(10); //v1有10个元素,每个元素都是0
vector<int> v2{10}; //v2有1个元素,该元素的值是10

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

对vector对象来说,直接初始化的方式适用于三种情况:1、初始值已知且数量较少2、初始值是创建另一个vector对象的副本3、所有元素的初始值都一样

2.向vector对象中添加元素

添加元素处理方法:先创建一个空的vector,在运行时利用vector的成员函数push_back向其中添加元素。push_back负责把一个值当成是vector对象的尾元素压入尾端。

vector<int> v2;
for(int i = 0; i != 100; ++i)
    v2.push_back(i);
//循环结束后v2有100个元素,值从0到99
string word;
vector<string> text;
while(cin >> word){
    text.push_back(word);
}
//实时读入数据然后将其赋予vector对象

注意:如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环【目前我也不知道为啥,书里说以后解释】

3.其他vector操作

v.empty(); //如果v中不含任何元素,返回真;反之返回假
v.size(); //返回v中元素的个数
v.push_back(t); //向v的尾端添加一个值为t的元素
v[n]; //返回v中第n个位置上元素的引用

访问vector对象中元素的方法与string类似,例如,可以使用范围for语句处理vector对象中的所有元素。

vector<int> v{1,2,3,4,5,6,7,8,9}
for(auto &i : v) //对于v中每个元素(i是引用,这样能通过i给v的元素赋值)
    i *= i;  //等价于i=i*i求该元素的平方
for(auto i : v)
    cout << i << " "; //输出该元素
cout << endl; 

计算vector内对象的索引,例如,以10分为一个分数段统计成绩的数量:0~9,10~99,...,90~99,100。

vector<unsigned> scores(11,0); //11个分段初始化为0
unsigned grade;
while(cin >> grade){
    if(grade <= 100) //只处理有效的成绩
        ++scores[grade/10]; //对应分段+1;等价于auto ind = grade/10; scores[ind] = scores[ind] + 1;
}

注意,不能用下标形式添加元素。

//错误实例
vector<int> ivec;
for(decltype(ivec.size()) ix=0; ix != 10; ++ix)
    ivec[ix] = ix; //严重错误:ivec不包含任何元素

//正确实例,应改为
    ivec.push_back(ix);

但是vector对象的下标可以用于访问已存在的元素,但是注意只能访问已存在元素,若通过下标访问不存在的元素会产生缓冲区错误!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值