我有一个成员变量,它是一个矢量迭代器。我试图保存它以便以后可以访问它(变量名= 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;
}
}
答案 0 :(得分:2)
如果由于任何原因需要保存迭代器,迭代器是错误的工具,因为它们可能无效。更好地使用索引,或在保存到索引之前转换迭代器:
size_t n = it - mCards.begin();
使用以下方式转换回来:
auto it = mCards.begin()+n;
这是有效的,因为vector<>
使用随机访问迭代器。
答案 1 :(得分:0)
检查矢量迭代器失效规则,例如这里Iterator invalidation rules。通常,如果您不检查std :: vector的容量,则在插入元素后不应使用先前获取的迭代器,因为可能会重新分配整个底层存储。