C++ vector中三个迭代器 erase 迭代器失效

1.C++中三个迭代器

在vector中,迭代器是很重要的存在,所以我们需要了解迭代器

三种迭代器分别为

1.普通迭代器,直接是vector<   >::iterator it  = v.begin();

相应代码如下(用迭代器遍历vector)

	vector<int>::iterator it1 = v1.begin();
	while (it1 != v1.end())
	{
		cout << *it1 << endl;
		++it1;
	}

2.const迭代器,这种是不能进行修改的迭代器

	vector<int>::const_iterator it2 = v2.begin();
	while (it2 != v2.end())
	{
		cout << *it2 << endl;
		++it2;
	}

想对vector中的数据进行修改时,编译器会报错

3.逆向迭代器

	vector<int>::reverse_iterator it3 = v3.rbegin();
	while (it3 != v3.rend())
	{
		cout << *it3 << endl;
		++it3;
	}

对于这种迭代器,就如字面意思,从后往前。具体不多说

2.C++中的erase

erase是一个删除数据的函数,它可以在vector中找到一个位置进行删除该数据。同时返回他的迭代器。

	vector<int> v5;
	v5.push_back(6);
	v5.push_back(7);
	v5.push_back(18);
	v5.push_back(199);
	v5.push_back(54342);
	vector<int>::iterator pos = find(v5.begin(), v5.end(), 19);
	if (pos != v5.end())
	{
		v5.erase(pos);
	}
	for (auto e : v5)
	{
		cout << e << " ";
	}
	cout << endl;

3.C++中迭代器失效

迭代器失效的原因可能是编译器报错,比如错误在vs中会报错,但是在GCC中不会报错,但是GCC会运行出错误的结果,接下来有一个简单示例。

vector<int> v7;
v7.push_back(1);
v7.push_back(2);
v7.push_back(3);
v7.push_back(4);
vector<int>::iterator it7 = v7.begin();
v7.push_back(5);
v7.push_back(6);
v7.push_back(7);


//以下情况迭代器失效
//原因是当it7走到2时,就进行了erase,所以这时it已经指向了3,但是vs编译器检查严格,就进行了报错,但是在GCC编译器下不会进行报错,但会计算错误
while (it7 != v7.end())
{
	if (*it7 % 2 == 0)
	{
		v7.erase(it7);
	}

	++ * it7;
}
for (auto e : v7)
{
	cout << e << " ";
}
cout << endl;

4.C++中的sort快排

sort快排是库函数algorithm的一个函数,用于快速排列数据。

//sort 快排
vector<int> v6;
v6.push_back(6);
v6.push_back(3);
v6.push_back(1);
v6.push_back(9);
v6.push_back(54342);
sort(v6.begin(), v6.end());
for (auto e : v6)
{
	cout << e << " ";
}
cout << endl;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值