无效的迭代器比较

时间:2015-06-26 14:27:38

标签: c++ iterator comparison

我已经编写了这段代码来查找字符串向量“elements”中的重复项。保留了唯一商品的存储空间,如果在唯一存储空间中找到商品,则表示它是重复的:

    vector<string> elements;
    // "elements" is populated ....
    //  ...

    // Find duplicates:
    vector<string> uniqueElements;

    for (int i = 0; i < elements.size(); ++i)
    {
        string name = elements[i];
        vector<string>::iterator it = find(uniqueElements.begin(), uniqueElements.end(), name);

        if(it != uniqueElements.end()) // ERROR
        {
            cerr << "Duplicate element " << name << endl;
            return false;
        }
        uniqueElements.push_back(name);
    }

在“elements”向量中的第2个项目之后,当重新分配uniqueElements容器时,我得到了一个

    vector iterators incompatible

错误消息。为什么会发生这种情况,因为我在每个循环开始时都会获得新的迭代器。

提前致谢。

1 个答案:

答案 0 :(得分:0)

感谢您的回复,结果证明这是不同的。 在我的原始代码中,我正在打印的错误是

 cerr << "Duplicate element " << name << " at position " << it - elements.begin() <<  endl;

我省略了确切的打印内容,认为它无关紧要,但当然错误是我在不同的向量上使用迭代器。 抱歉,麻烦。