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"
。どうして? 5.09 | 5.9
、最初の値:私はそれを見るように、str
は5.9
する必要がありますので、それはない...
私の最高の推測では、私はあなたが文字列を分割する場合ので、後方のイテレータと間違って何かをやっているということですその間にはまだ'0'
がありますが、最後のものはありません。 2番目の値は実際には私が期待したstd::string
です。
私は間違っていますか?
ルック::非常に慎重にremove_if'、あなたが操作している範囲について考えます。 –
逆イテレータは一度も使用していませんでしたが、私の推測によれば、次のように使用する必要があります: 'std :: remove_if(str.rend()、str.rbegin()、[](char value)' – user463035818
@KerrekSB私は彼にrtfmの運動を台無しにしたのですか? – user463035818