从矢量字符串C++中删除项目

liq*_*uid 0 c++ vector

我有一个矢量,它的内容是这样的..

std::vector<string> vec;

vec.push_back("XXXX_LLLL");
vec.push_back("XXXX_HHHH");
vec.push_back("XXXX_XXXX");
Run Code Online (Sandbox Code Playgroud)

我想迭代向量并从字符串中删除"_".我已经尝试过使用find-erase习惯用法,我用一个结构来查找_.

vec.erase(remove_if(vec.begin(), vec.end(), IsUnderScore2()),vec.end());
Run Code Online (Sandbox Code Playgroud)

但我意识到它并没有迭代我的矢量字符串中的每个字符串,因此它永远不会删除下划线.是否有另一种迭代矢量的方法,它的各个组件,可以帮助我吗?

Pra*_*ian 7

迭代vector并在每个字符串上使用erase-remove成语,而不是在vector你现在正在做的元素上

std::vector<string> vec;

vec.push_back("XXXX_LLLL");
vec.push_back("XXXX_HHHH");
vec.push_back("XXXX_XXXX");

for(auto& str : vec) {
  str.erase(std::remove(str.begin(), str.end(), '_'), 
            str.end());
}
Run Code Online (Sandbox Code Playgroud)

C++ 03版:

for(std::vector<std::string>::iterator it = vec.begin(), it != vec.end(), ++it) {
  it->erase(std::remove(it->begin(), it->end(), '_'), 
            it->end());
}
Run Code Online (Sandbox Code Playgroud)