C++代码"x.erase(std::remove(x.begin(), x.end(), ), x.end())"是如何工作的?

How does the C++ code `x.erase(std::remove(x.begin(), x.end(), ' '), x.end())` work?

本文关键字:end 何工作 工作 begin erase 代码 std remove C++      更新时间:2023-10-16

问题是我通常会使用 for 循环来处理这种事情,但这种方法似乎更有效。关于cplusplus的文档对我来说有点难以理解。

std::string no_space(std::string x)
{
    x.erase(std::remove(x.begin(), x.end(), ' '), x.end());
    return x;
}

函数std::remove(x.begin, x.end), ' ')将元素移动到字符串的末尾,函数std::erase实际删除移动到字符串末尾的元素。 您还可以在文档中阅读有关此内容的更多信息,在此处输入链接说明

有和你一样的例子。

>std::remove将所有空格移动到字符串的末尾,并将迭代器返回到第一个空格。然后string::erase从第一个空格中删除,直到字符串的末尾。

这是一个简单的描述,正如评论者适当指出的那样,请确保您阅读了这些函数的文档。

让我们分解一下

std::remove(x.begin(), x.end(), ' ')

这将遍历x的所有元素,并用下一个非空格覆盖任何空格。它返回最后一个非空格字符之外的位置。重要的是,它不会改变x size。假设返回值被分配给一个std::string::iterator it。从itx结束,元素处于有效但未指定的状态。

x.erase(it, x.end());

这会从x中删除元素,从 remove 返回的位置开始。这消除了x末尾的所有"有效但未指定的状态"值,这些值是由remove留下的。