使用vector的erase报vector iterators incompatible错

版权声明:本文为博主原创文章,未经博主允许不得转载。访问本人博客可以百度COCO56,获取更多资讯。有事儿请内信或者在文章下方评论 https://blog.csdn.net/COCO56/article/details/88916290

erase方法在删除元素A后,迭代器会变成野指针,并返回一个指向元素A的下一个元素的迭代器。

下面是使用的案例:

// erasing from vector
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	std::vector<int> myvector;

	// set some values (from 1 to 10)
	for (int i = 1; i <= 10; i++) myvector.push_back(i);

	// erase the 6th element
	myvector.erase(myvector.begin() + 5);

	// erase the first 3 elements:
	myvector.erase(myvector.begin(), myvector.begin() + 3);

	std::cout << "myvector contains:";
	for (unsigned i = 0; i < myvector.size(); ++i)
		std::cout << ' ' << myvector[i];
	std::cout << '\n';


	myvector.clear();

	// set some values (from 1 to 10)
	for (int i = 1; i <= 10; i++) myvector.push_back(i);

	for (vector<int>::iterator it = myvector.begin(); it != myvector.end();)
	{
		if (*it == 5)
		{
			it = myvector.erase(it);
			//myvector.erase(it);//错误写法
		}
		else
		{
			it++;
		}
	}

	std::cout << "myvector contains:";
	for (unsigned i = 0; i < myvector.size(); ++i)
		std::cout << ' ' << myvector[i];
	std::cout << '\n';

	return 0;
}

猜你喜欢

转载自blog.csdn.net/COCO56/article/details/88916290