vector 迭代器失效
vector容器:
迭代器的失效:如果给容器进行增添、删除的时候改变了容量的大小,这个时候迭代器任然指向原来的那个空间的那个位置,但是原来的空间经过容量的变化之后已经被改变了,所以这个时候迭代器会出现失效的情况,如果想要解决这个问题的话,可以通过接受返回值来让迭代器指向新的空间。
代码示例:
#include <iostream>
#include <vector>
using namespace std;
void PrintVector(const vector<int>& v)
{
vector<int>::const_iterator it = v.cbegin();
while (it != v.cend())
{
cout << *it << " ";
++it;
}
cout << endl;
}
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
PrintVector(v);
//v.insert(v.begin(),3);
v.insert(v.begin(), 5, 1);
//v.insert(v.begin(), v.rbegin(), v.rend());
PrintVector(v);
vector<int> vi;
vi.push_back(1);
vi.push_back(2);
vi.push_back(3);
vi.push_back(3);
vi.push_back(3);
vi.push_back(3);
vi.push_back(4);
vi.push_back(3);
vi.push_back(3);
vi.push_back(5);
vi.push_back(3);
vi.push_back(3);
vi.push_back(3);
vi.push_back(5);
//vi.erase(vi.begin());
//vi.erase(vi.begin(), vi.end());
for (int i = 0; i < vi.size(); i++)
{
if (vi[i] == 3)
{
vi.erase(vi.begin() + i);
i--;
}
}
PrintVector(vi);
return 0;
}
在上面的代码示例中,insert与erase函数的使用中,会可能出现迭代器失效的情况,所以这个时候如果我们还要使用迭代器的话,可以选择将迭代器返回,这个时候才能得到新的迭代器的正确的位置
由此我们也可以得出,在insert与erase的过程中,如果使用自己写的这两个函数的话,返回值是iterator