我需要遍历这个 vector 并删除重复项。此代码中某处发生段错误。我的猜测是它与迭代器运行时删除元素有关,但我还没有真正具体了解这些迭代器的实际工作方式,所以我无法弄清楚。
vector<char *>::iterator iter;
for (iter = v->begin(); iter != v->end()-1; iter++ ){
char *aString = *iter;
int n = 1;
while(iter+n != v->end()){
int comparison = strcmp(aString, *(iter+n));
if(comparison == 0){
v->erase(iter + n);
}
n++;
}
}
最佳答案
真的,您这里只是遇到了几个差一的问题。当您删除元素时,您错误地与 end()
进行了比较并递增了 n
:
for (iter = v->begin(); iter != v->end()-1; iter++ ){
^^^^^^^^
和
while(iter+n != v->end())
^^
以下将执行您想要的操作(并证明它有效):
int main()
{
std::vector<const char*> v (4, "this");
std::vector<const char *>::iterator iter;
for (iter = v.begin(); iter < v.end(); iter++ ) {
std::cout << *iter << " ";
}
std::cout << std::endl;
for (iter = v.begin(); iter < v.end(); iter++ ){
const char *aString = *iter;
int n = 1;
while(iter+n < v.end()){
int comparison = strcmp(aString, *(iter+n));
if(comparison == 0){
v.erase(iter + n);
}
else
n++;
}
}
for (iter = v.begin(); iter < v.end(); iter++ ) {
std::cout << *iter << std::endl;
}
}
输出是:
this this this this
this
关于c++ - 为什么在遍历此 vector 时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623457/