gpt4 book ai didi

c++ - 可能的逻辑错误 : remove(vector. begin(),vector.end(),val)

转载 作者:行者123 更新时间:2023-12-03 07:57:54 27 4
gpt4 key购买 nike

我正在寻找一种删除文件中某些行的方法。我在 Stack Overflow 上读到,最好的方法是将其写入 vector ,然后从数组中删除该元素,然后将数组读回到文件中。我正在这样做,并尝试使用删除方法删除数组的元素。

我在这里找到了这个方法:

Removing Method

但这似乎不起作用,在自己编译了他们的代码后,我发现他们的代码也不起作用。

我缺少什么简单的东西吗?或者这是不正确的。这是他们的代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
vector<int> v;
//Insert values 1 to 10
v.push_back(20);
v.push_back(10);
v.push_back(30);
v.push_back(20);
v.push_back(40);
v.push_back(20);
v.push_back(10);

vector<int>::iterator new_end;
new_end = remove(v.begin(), v.end(), 20);

for(int i=0;i<v.size(); i++){
cout << v[i] << " ";
}
//Prints [10 30 40 10]
return 0;
}

(进一步说明,“不起作用”的意思是:它打印了 20 10 30 20 40 20 10)

最佳答案

只需更改 for 循环即可

new_end = remove(v.begin(), v.end(), 20);

for ( auto first = v.begin(); first != new_end; first++){
cout << *first << " ";
}

或者您可以删除已删除的元素,例如

v.erase( new_end, v.end() );
for(int i=0;i<v.size(); i++){
cout << v[i] << " ";
}

v.erase( new_end, v.end() );
for ( const auto &item : v ){
cout << item << " ";
}

或者您可以将标准算法 std::remove 的调用与成员函数 erase 结合起来,例如

v.erase( remove(v.begin(), v.end(), 20), v.end() );

注意,如果你的编译器支持 C++ 20 那么你就可以这样写

std::erase( v, 20 );

关于c++ - 可能的逻辑错误 : remove(vector. begin(),vector.end(),val),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75574388/

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