[英]Random access iterators - does vector.end() - vector.begin() = vector.size() in C++;
[英]Vector.end() unexpected behavior after deleting an element in C++
我在删除向量中的重复值时遇到问题。 我知道当向量值被删除时,向量会被重新分配以维护没有任何“黑洞”的数据。 问题是,当我在循环中使用 remove() 时,当代码运行回它的条件语句时,我收到断言失败消息。
我的问题是:如果我在迭代的条件下使用 nums.end(),它是否获得迭代器的静态值,或者对于每次迭代,它返回一个新的迭代器,该迭代器指向新的re-分配向量? 如果有或没有,增量似乎有什么问题?
while ( itfast != nums.end()) {
if (*itslow == *itfast) {
nums.erase(itfast);
}
else {
itslow++;
itfast++;
}
}
std::vector.erase 使当前迭代器无效,但返回一个迭代器,指向下一个经过擦除的有效迭代器。
itfast = nums.erase(itfast);
正如丹尼尔指出的那样,这将使您拥有的任何其他迭代器无效,因此您也必须处理 itslow 情况。
当处理更复杂的擦除时,它可以更简单并且更不容易出错,而是处理索引,尽管如果您删除一个元素并且 itslow >= 删除的元素,也存在关于 itslow 的陷阱。 没有看到您的确切问题是什么,我无法准确说出使用哪个。
有关擦除的更多详细信息,请参阅 cppreference。 还有其他几个与此非常相似的问题。
https://en.cppreference.com/w/cpp/container/vector/erase std::vector 迭代器失效
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.