C++primer学习笔记:vector和迭代器的使用方法


前言

vector是一个标准库类型,表示对象的集合,也常常被称作容器。容器种类很多,包括list、deque、set、map等等,本篇文章将对vector的使用方法进行简要讲解。
vector可以看作一个长度可变的数组,相对于单纯的数组来说,灵活性更高,增删改查方便,可以使用迭代器。


一、vector的定义和初始化

在使用vector之前,必须要先引入库

#include<vector>
using std::vector;

初始化vector对象的方法

假设T是一个类型

vector<T>v1;

这样就定义了一个空vector,也可以定义时就初始化,如下:

vector<T>v2(v1);//将v1作为v2的副本创建一个相同的vector
vector<T>v3(n, val);//创建一个包含n个val的vector
vector<T>v4(n);//设定初始大小为n
vector<T>v5{ a,b,c }//列表初始化

假如我们需要定义一个包含double类型的vector,并且其中包含5个11.45:

vector<double>v_double(5, 11.45);

注意,包含类型不同的容器不能相互拷贝


二、vector基本操作

1. 拷贝

vector<int>a;
vector<int>b = a;//直接用 = 号赋值即可

2.向vector中添加元素

vector<int>a;
//这里使用了循环将1~9添加到a的尾部
for (int i = 0; i < 10; i++)
{
	a.push_back(i);
}

如果需要输出vector中的元素,可以把它当作一个数组来看待

//这里使用范围循环来输出
for (auto x : a)
{
	std::cout << x << std::endl;
}

有人认为范围循环效率低于取下标,这是错误的,它俩效率一样
注意1:使用范围循环不应改变其序列大小
注意2:不能使用超过原容器大小的下标的方式来新增元素

3.一些vector的成员函数

vector<int>v;
v.empty()检查是否为空
v.size()返回元素个数
v.push_back()在尾部插入元素
v.pop_back()删除尾部元素
v.resize()设置vector大小
v.clear()清除所有元素
v.front()返回第一个元素(v[0])
v.back()返回最后一个元素(v[v.size() - 1])

.三、迭代器使用

迭代器类似于指针(实际上指针就是某种迭代器)
假设我们有一个名为a的vector:

vector<int>a{ 0,1,2,3,4,5,6 };

我们可以用迭代器获取首部和尾部

auto iter_front = a.begin();
auto iter_back = a.end();
std::cout << *iter_front << std::endl;//输出0

auto推断的类型是:vector<int > ::iterator,这里auto是C + 11的特性,它可以自动推导等号后面数据的类型.
其中iter_back不能被输出,因为它是尾后指针,指向最后一个元素的后一块内存,如果元素数为0,那么iter_front == iter_back.

使用迭代器进行遍历

for (auto x = a.begin(); x != a.end(); ++x)
{
	std::cout << *x;
}

同样的,使用迭代器的循环也不能向循环中添加元素,否则会失效

也可以用迭代器直接获取某个元素, 例如:

auto p = a.begin();
std::cout<<*(p + 2)<<std::endl;//输出a[2]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值