【发布时间】:2012-01-30 17:25:59
【问题描述】:
来自 Java 并使用 ArrayList 类让我在尝试学习 C++ 等价物(向量)时感到非常沮丧。
我正在编写一个从整数向量中删除某个整数的函数。有一段时间我无法弄清楚为什么它会导致分段错误。在查看文档后,我意识到 .erase 也会在删除元素后删除任何元素。这绝对不是我想要做的,所以我有点迷失了如何从向量中只删除一个元素而不删除之后的元素。
我目前拥有的导致分段错误的函数:
void remove(int n){
for(int a=0; a<list.size(); a++){
if(list.at(a)==n){
list.erase (list.begin()+(n-1));
cout << n << " has been erased" << endl;
break;
}
}
}
【问题讨论】:
-
从您的示例中假设您只期望出现一次“n”,那么您可能需要考虑使用 std::set 而不是向量。在这种情况下,您只需要一条语句即可从集合中删除元素 - 'set.erase(n);'。当然,如果您有多次出现,那么您将需要一个列表或向量。