Closed qd1308504206 closed 2 years ago
必须写成这样子,才能成功。很是疑惑
remove_if用法错误,正确写法是: src.erase(remove_if(src.begin(), src.end(), functor), src.end()); 或者用cpp20的std::erase_if: erase_if(src, functor);
无法顺畅的大口呼吸,是活着的最好证明
---原始邮件--- 发件人: @.> 发送时间: 2022年7月20日(周三) 中午12:14 收件人: @.>; 抄送: @.***>; 主题: [parallel101/course] std::string 使用迭代器,删除\r的时候,没办法删除干净 (Issue #12)
std::string src = "\r\nabc\r\r\r\r\r\r\r\r123456\nABCDEF\r\n\r\n\r\r\r\r"; std::remove_if(src.begin(), src.end(), [](const char& c) { return c == '\r'; }); //我认为应该是 \nabc123456\nABCDEF\n\n //实际却是:src = "\nabc123456\nABCDEF\n\n\nABCDEF\r\n\r\n\r\r\r\r"
最近在学习彭老师的课程,学到了 string其实也有迭代器。然后就找了一个remove_if函数试了一下。
请彭老师帮忙解答一下。这是为什么呢?
我的电脑是win10 64位, 使用的是virtual stdio 2022 preview
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
remove_if并不会缩短string的长度,他只会把没有删除的元素“移动”到靠头的位置,剩余的元素仍然存在,需要用erase或resize调整大小才能真正删除。
无法顺畅的大口呼吸,是活着的最好证明
---原始邮件--- 发件人: @.> 发送时间: 2022年7月20日(周三) 中午12:14 收件人: @.>; 抄送: @.***>; 主题: [parallel101/course] std::string 使用迭代器,删除\r的时候,没办法删除干净 (Issue #12)
std::string src = "\r\nabc\r\r\r\r\r\r\r\r123456\nABCDEF\r\n\r\n\r\r\r\r"; std::remove_if(src.begin(), src.end(), [](const char& c) { return c == '\r'; }); //我认为应该是 \nabc123456\nABCDEF\n\n //实际却是:src = "\nabc123456\nABCDEF\n\n\nABCDEF\r\n\r\n\r\r\r\r"
最近在学习彭老师的课程,学到了 string其实也有迭代器。然后就找了一个remove_if函数试了一下。
请彭老师帮忙解答一下。这是为什么呢?
我的电脑是win10 64位, 使用的是virtual stdio 2022 preview
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
感谢大佬解答
看了教程https://en.cppreference.com/w/cpp/algorithm/remove 之后,才恍然大悟。
最近在学习彭老师的课程,学到了 string其实也有迭代器。然后就找了一个remove_if函数试了一下。
请彭老师帮忙解答一下。这是为什么呢?
我的电脑是win10 64位, 使用的是virtual stdio 2022 preview