我得到一个文件作为输入,我读到这样的第一行(引号标记开头和结尾,但不在文件中):
" 1, 2.0, 3.0, 4.0 "
当我使用这样的删除命令时:
astring = line;
cout << endl << "Before trim: " << line << endl;
remove(astring.begin(), astring.end(), ' ');
cout << endl << "After trim: " << astring << endl;
我的输出为:
1,2.0,3.0,4.02.0, 3.0, 4.0
我只需将输出设为1,2.0,3.0,4.0
。这有什么问题?
答案 0 :(得分:7)
std::remove
只是将序列中所有未删除的元素向前移动;然后,您需要使用erase
:
s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
这称为擦除删除习惯用法。 remove
不能截断底层容器本身,因为它没有对容器的引用;它只有容器中元素的迭代器。
答案 1 :(得分:0)
詹姆斯的回答是正确的,这为我节省了很多工作。 td :: remove只是在序列中向前移动所有未删除的元素;然后,您需要使用erase:
截断底层容器std.erase(std :: remove(s.begin(),s.end(),''),s.end()); 这被称为擦除删除习语。 remove不能截断底层容器本身,因为它没有对容器的引用;它只有容器中元素的迭代器。