【发布时间】:2019-09-09 18:22:25
【问题描述】:
我是 STL 的新手,我正在尝试一个简单的程序来使用 push_back 插入元素并尝试删除甚至索引的元素。
我取了 n 个元素并将其推入向量中。但是当我删除它时,我会得到分段错误或一些不希望的输出。
for(i=0;i<n;++i)
{
if(i%2==0)
v.erase(v.begin()+i);
}
如果我使用 n-1 而不是 n 它可以工作,但不会提供所需的输出。
【问题讨论】:
-
当你删除一个元素时,
.size()会减少,并且后面的所有元素都会向左移动。您需要考虑到这一点。 -
作为替代方案,您可能想看看remove_if
-
方便的建议:
erasereturns an iterator to the next item in the list。如果你重写for循环以一直使用迭代器,这个问题就会变得容易得多。
标签: c++ c++11 vector stl erase-remove-idiom