vector 与迭代器的配合使用

vector 与迭代器的配合使用

开发工具与关键技术:Visual Studio、C++
作者:张国军	
撰写时间:2019年06月 27日

每一个容器都会给出自己的迭代器iterator。那么我们先来看一下vector容器的迭代器。
先看一个例子:

#include  <iostream>
#include <vector>
using  namespace std;
void  main() {
	vector<int> vecInt; 
	vector<int>::iterator it;
	vecInt.push_back(1);
	vecInt.push_back(3);
	vecInt.push_back(5);
	vecInt.push_back(7);
	vecInt.push_back(9);
	for (it = vecInt.begin(); it != vecInt.end(); ++it)
	{
		cout << *it <<" "; 
	}
	cout << endl;
}

在这里插入图片描述
从上边这个例子我们可以看出。迭代器,相当于我们的指针it = vecInt.begin();迭代器指针指向开始,it != vecInt.end();迭代器的指针不等于我们容器的结尾,++it指针加加,然后当我们需要输出的时候我们就需要对我们的迭代器指针进行解址操作,cout << *it <<" ";然后可以cout输出。
当然 ,我们迭代器可以从容器的开始输出,那么我们可以试着尝试一下从后边倒着输出,我们都知道迭代器是一个指针,那么我想它指向的地址然后进行减减也是一样的。
那么我们下边来看一个例子吧:

#include  <iostream>
#include <vector>
using  namespace std;
void  main() {
	vector<int> vecInt; 
	vector<int>::iterator it;
	vecInt.push_back(1);
	vecInt.push_back(3);
	vecInt.push_back(5);
	vecInt.push_back(7);
	vecInt.push_back(9);
	for (it = vecInt.end(); it != vecInt.begin(); --it)
	{
		cout << *it;
	}
	cout << endl;
}

在这里插入图片描述
正常情况下的,我们很多人也会这么想,但是它就会报错,因为我们对vecInt.end()进行解址的时候系统就会给我们报错可以是我们访问了不属于我们的内存,那么我们可以在另外一方面理解,那就是我们的数学方面包含或者不包含的意思。也就相当于容器[begin(),end()},所以我就将我们的代码做了一个简单的处理
for (it = vecInt.end()-1; it != vecInt.begin(); --it)
{
cout << *it;
}
在这里插入图片描述
这个时候呢,我们可以从结果可以看到的我们的数据可以正确的输出,但是少了一个数据,那就是我们begin()数据,其实我们的指针已经走到我们begin()这里,只是并没有对它进行解址而已,所以我在下边再进行解址一次
for (it = vecInt.end()-1; it != vecInt.begin(); --it)
{
cout << *it;
}
cout << *it;
在这里插入图片描述
这样子我们的数据就完完全全的出来了。
但是有一个问题就是,这样子太麻烦了,所以在这里给大家一个另外一个写法,我们看一下下边这个例子:

#include  <iostream>
#include <vector>
using  namespace std;
void  main() {
	vector<int> vecInt; 
	vector<int>::iterator it;
	vecInt.push_back(1);
	vecInt.push_back(3);
	vecInt.push_back(5);
	vecInt.push_back(7);
	vecInt.push_back(9);
	vector<int>::reverse_iterator rit;
	for (rit = vecInt.rbegin(); rit != vecInt.rend(); ++rit)
	{
		cout << *it;
	}
	cout << endl;
}

在这里插入图片描述
输出来的结果的跟我们上边那个是一样的。 reverse是相反的意思,所以我们可以用这个输出我们需要到过来的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值