C++ 容器与范围for 语句

C++ 容器与范围for 语句

#预定义

#include

using std::vector

#容器是一个模版,需要用具体的类型进行实例化

vector ivec

vector name

vector <my_class> my_own_object

可以默认初始化vector,从而创建一个指定类型的容器,只不过这时候的容器是一个空容器

看似没什么用,但是对容器进行添加元素等是很方便而且也是很常见的事情

#拷贝元素值

vector new_ivec=ivec

vector new_ivec(ivec)

#列表初始化vector对象

vector names={“xiaoming”,“xiaohong”,“xiaoqiang”}

如果提供的是列表进行容器的初始化,则必须用花括号引用起来

#创建指定数量的相等的vector

vector new_ivec(10,-1) //创建十个元素值为-1的容器

列表初始化还是元素数量?

可以用圆括号还是花括号加以区分

向vector对象中添加元素

用push_back函数

先创建一个空的vector对象,然后再利用成员函数push_back向其中添加元素

push_back负责把一个值当成vector对象的尾元素“push”到vector对象的“back”中

vector ivec;

for (int i=1;i<=100;i++)

{

​ ivec.push_back(i);

}

有时需要实时读入数据然后将其赋予vector对象:

string name;

vector names;

while(cin >> name)

{

​ names.push_back(name);

}

(开始时创建空的vector对象,在运行时再动态添加元素)

要求:如果循环体内部包括向vector对象添加元素的语句,则不能使用范围for循环

C++11提供了一种特殊的for循环:基于范围的for循环,可以简化数组的处理

(类似于py中的 for item in items)

在使用基于范围的for 循环处理数组时,该循环可以自动为数组中的每一个元素迭代一次

#不必使用计数器变量控制其迭代,也不必担心数组下标越界的问题

#基于范围的for循环的一般格式:

for (dataType rangeVariable:array)

​ statement;

dataType:范围变量的数据类型,或者是其能直接转化过去的数据类型

rangeVariable:范围变量的名称,在循环期间接收不同数组元素的值

array:要让该循环进行处理的数组的名称

#可以使用auto关键字指定范围变量的数据类型,而不必手动指定

使用基于范围for 循环来修改数组

在范围变量前加上引用符号&,使其变成一个引用变量,当循环执行时,该范围变量不再是数组元素的副本,而变成数组元素的别名,因此,对范围变量进行的任何修改都会实际作用到他当前引用的数组元素

如果要使用元素下标,则不能使用范围for循环

访问vector对象中元素的方法与访问string对象中字符的方法差不多,也是通过元素在vector对象中的位置。

my_vector.empty()返回容器是否为空

my_vector.size()返回容器的长度

计算vector对象内元素的索引

//以10分为一个分数段统计成绩的数量

vector scores(11,0);

unsigned grade;

while(cin >> grade)

{

​ if (grade<=100)

​ ++scores[grade/10];

}

vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能向vector中添加元素

添加元素: my_vector.push_back(item)

#试图用下标的形式去访问一个不存在的元素将引发错误,不过这种错误不会被编译器发现,而是在运行时产生一个不可预知的值(缓冲区溢出)

确保下标合法的一种有效手段:尽可能使用范围for语句

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值