迭代器的使用--关于迭代器的失效

这是程序员面试宝典上的一个小题。

要点是:使用erase之后迭代器失效。

实际上失效是指原来的迭代器,在删除一个元素之后,自动指向了下一个元素。

测试代码如下,删除容器中的值为6的所有元素。

A 错误的代码为:

#include <iostream>
#include <vector>

using namespace std;

void print(vector<int>);

int main()
{
        vector<int> array;
        array.push_back(1);
        array.push_back(6);
        array.push_back(6);
        array.push_back(3);
        vector<int> :: iterator itor;

        for (itor = array.begin(); itor != array.end(); itor++)
        {
                if (6 == *itor)
                {
                        array.erase(itor);
                }
        }

        cout << "vector size is: " << array.size() << endl;
        for (itor = array.begin(); itor != array.end(); itor++)
        {
                cout << *itor << " " << endl;
        }

        return 0;
}


输出的结果是:1, 6, 3.第二个6没有删除。


B 修改后的代码如下:

#include <iostream>
#include <vector>

using namespace std;

void print(vector<int>);

int main()
{
        vector<int> array;
        array.push_back(1);
        array.push_back(6);
        array.push_back(6);
        array.push_back(3);
        vector<int> :: iterator itor;

        for (itor = array.begin(); itor != array.end();)
        {
                if (6 == *itor)
                {
                        array.erase(itor);
                }
                else
                        itor++;
        }

        cout << "vector size is: " << array.size() << endl;
        for (itor = array.begin(); itor != array.end(); itor++)
        {
                cout << *itor << " " << endl;
        }

        return 0;
}


结果是 1 ,3

可见,使用了erase之后,迭代器自动指向了下一个元素。


你可能感兴趣的:(vector,面试,测试,iterator)