【发布时间】:2012-12-04 19:36:48
【问题描述】:
我想处理向量中的元素一段时间。为了优化这一点,我不想在处理项目时删除它,并在最后删除所有已处理的项目。
vector<Item*>::iterator it;
for(it = items.begin(); it != items.end(); ++it)
{
DoSomething(*it);
if(TimeIsUp())
{
break;
}
}
items.erase(items.begin(), it);
it == items.end() 时使用擦除是否安全?在文档中,据说erase() 将删除 [first,last),这应该是安全的,但我想确定。
编辑:
使用 std::vector.erase(begin(), begin()) 安全吗?
【问题讨论】:
-
我强烈建议不要使用
vector的常规指针。要么使用专门设计用于保存指针的容器,要么使用vector的智能指针。 (一个可能的例外是向量不拥有它所指向的对象。) -
@Cristy:我不认为这真的是重复的,另一个 Q 是关于崩溃的,因为增加了一个迭代器超出了
end。它也只是偶然包含erase和end。 -
我确实想知道为什么向量不能是
cleared。 -
@Damon 因为
it可能并不总是等于items.end() -
@Praetorian:哦,我真愚蠢……你是对的。我读过“之后删除所有元素”而不是“删除所有处理元素”。