3
我试图从后面开始删除std::string
中的每个'0'
。根据this,有多种方式可以向后迭代器.erase
。字符串擦除使用向后迭代器追加元素
奇怪的是,它们都将数字附加到std::string
,而不是将它们擦除!
这里是一个小样品
//'str' will be "5.090000"
std::string str = std::to_string(5.09);
auto it = std::remove_if(str.rbegin(), str.rend(), [](char value) {
return value == '0';
});
1)预C++11
方式:
str.erase(--(it.base()));
2)C++11
方式(1)
str.erase(std::next(it).base());
3)C++11
方式(2 )
std::advance(it, 1);
str.erase(it.base());
在所有情况下,str == "5.095.9"
。为什么?因为在我看来,str
应该是5.9
,但它不是...
我最好的猜测是,我做错了什么与向后迭代,因为如果你分割字符串:5.09 | 5.9
,第一个值仍然在'0'
之间,但不是最后一个。第二个值实际上是我预期的std::string
。
我做错了什么?
看性病的'文档:: remove_if'非常小心,想想你操纵的范围内。 –
我从来没有使用后向迭代器,但我的天真猜测是你必须像这样使用它们:'std :: remove_if(str.rend(),str.rbegin(),[](char value)' – user463035818
@KerrekSB我是否会溺爱他行使rtfm? – user463035818