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