我正在尝试反向迭代一个 vector 。我已经使用 typedef“制作”了一个迭代器:
typedef std::vector<Object*>::iterator Cursor;
我的问题是,这个函数在到达 vector 的开头时似乎崩溃了。我有以下代码:
void InsertFunc(Cursor& it, Object& o) {
vec_.insert(it, o);
--it;
for (; it >= vec_.begin(); --it) {
if ((*it)->type() == Object::SomeType) {
do_something
} else {
do_something_else
}
}
std::cout << "Insertion succes!" << std::endl;
}
我已经对其进行了测试,并且我确信该函数到达了 vector 的开头,但随后程序终止并显示消息“插入成功!”永远不会打印。知道为什么吗?
最佳答案
如果由于不断增长的重新分配而必须在内存中移动元素,则 insert
可能会使您的迭代器失效。
您可以从插入调用本身获得一个新的、有效的迭代器:
it = vec_.insert(it, o);
你走了。
如果新元素已经在 begin()
中,您的下一行 --it
将导致失败;您刚刚迭代了开头。老实说,我会完全重新审视这个函数的逻辑。
关于c++ - Vector::iterator 在与 begin 比较时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20706399/