gpt4 book ai didi

c++ - 为什么当我删除其他字符时最后一个字符会加倍,如何防止这种情况发生?

转载 作者:行者123 更新时间:2023-12-01 23:39:40 29 4
gpt4 key购买 nike

我有以下代码:

auto rrr="my mixed string"s;
rrr.erase(std::remove_if(std::begin(rrr), std::end(rrr), [](char const c) { return c == 'm'; }));
std::cout<<rrr<<std::endl;

输出是y固定字符串

我希望代码只删除字符串中的每个 m,而是在末尾添加一个 g

为什么会发生这种情况?我该如何解决这个问题?

最佳答案

您使用了错误的erase()重载。您正在调用 erase() 重载,该重载采用单个迭代器参数,即要从字符串中删除的单个字符的迭代器。

std::remove_if 只需将值移至末尾即可从序列中“删除”这些值,然后返回一个新的“序列结束”迭代器值。您对错误的 erase() 重载的调用只会删除新序列之后的字符。如果没有删除任何内容,您可能会将 end() 传递给 erase(),从而导致未定义的行为并可能导致崩溃。但在这种情况下,你很幸运。

要完全删除移至字符串末尾的“已删除”字符,请将字符串的 end() 迭代器传递给 erase():

rrr.erase( /* What you already have */, rrr.end());

您的 C++ 书籍或 C++ 引用手册应该包含 erase() 所有可用重载的完整列表,包括您应该在此处使用的重载,以及它们的解释做。

关于c++ - 为什么当我删除其他字符时最后一个字符会加倍,如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60731796/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com