gpt4 book ai didi

c++ - STL remove() 函数的行为 - 仅重新排列容器元素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:31 27 4
gpt4 key购买 nike

我在 StackOveflow 和其他来源上读到,删除函数的行为只是重新排序原始容器,以便将要删除的元素移动到容器的末尾并且不会被删除。它们仍然是容器的一部分,并且 remove() 函数只是返回一个迭代器,该迭代器分隔要保留的元素范围的末尾。

因此,如果您从未实际修剪容器中具有已“删除”的值的部分,它们应该仍然存在。

但是当我运行下面的代码时,在未“删除”的字母数字字符之后没有尾随空格。

int main()
{
std::string test "this is a test string with a bunch of spaces to remove";
remove(test.begin(), test.end(), ' ');
std::cout << test << std::endl;

return 0;
}

这是怎么回事?既然我从不调用 test.erase() ,我的字符串上不应该有一堆尾随空格吗?是否保证调用 remove() 后“已删除”的项目仍然存在?

PS-我不是在寻找有关如何最好地从字符串中删除空格的建议,上面只是让我感到困惑的 remove() 行为的说明性示例。

最佳答案

调用 remove 后留在容器末尾的不一定是被删除的元素。这只是垃圾。很可能是“调用删除之前那些位置的任何内容”,但您也不能依赖它。就像一个未初始化的变量,它可以是任何东西。

例如字符串:

"Hi I am Bob!\0"

调用 remove 去除空格后可能看起来像这样

"HiIamBob!\0b!\0"

不过,您不会在 cout 上看到它,因为它会在到达“\0”后停止打印。

关于c++ - STL remove() 函数的行为 - 仅重新排列容器元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3258831/

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