如何保存向量迭代器的值?

时间:2014-03-29 16:13:15

标签: c++ vector iterator invalidation

我有一个成员变量,它是一个矢量迭代器。我试图保存它以便以后可以访问它(变量名= mIt)。然而,在该方法中,例如,一旦该方法结束,该值就被擦除。我如何坚持这个价值?

for(vector<Card>::iterator it = mCards.begin(); it != mCards.end(); ++it)
        {
            Card& currentCard = *it;
            temp = it;
            int compareResult = currentCard.GetLastName().compare(card.GetLastName());
            if (compareResult <= 0)
            {
                mIt = it;
                mCards.insert(temp, card);  // instead of it?
                return;
            }

        }

2 个答案:

答案 0 :(得分:2)

如果由于任何原因需要保存迭代器,迭代器是错误的工具,因为它们可能无效。更好地使用索引,或在保存到索引之前转换迭代器:

size_t n = it - mCards.begin();

使用以下方式转换回来:

auto it = mCards.begin()+n;

这是有效的,因为vector<>使用随机访问迭代器。

答案 1 :(得分:0)

检查矢量迭代器失效规则,例如这里Iterator invalidation rules。通常,如果您不检查std :: vector的容量,则在插入元素后不应使用先前获取的迭代器,因为可能会重新分配整个底层存储。