gpt4 book ai didi

c++ - 为什么在遍历此 vector 时会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:27 25 4
gpt4 key购买 nike

我需要遍历这个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com