使用copy_if复制std :: string(到另一个字符串)

问题描述 投票:0回答:1

我想知道从一个字符串到另一个字符串有选择地copy_if字符的最佳方法是什么。我有类似的东西

string buffer1("SomeUnknownwSizeAtCompileTime");
string buffer2; // WillBeAtMostSameSizeAsBuffer1ButMaybeLessAfterWeRemoveSpaces
buffer2.resize(buffer1.length());
std::copy_if(buffer1.begin(), buffer1.end(), buffer2.begin(), [](char c){
            //don't copy spaces
            return c != ' ';
});

buffer2可能比buffer1小很多,但我们必须分配与buffer1的长度相同的内存量。但是,在复制之后,buffer2的结束迭代器将指向空终止字符。我google了,显然这是设计的,所以现在我想知道我不应该使用带字符串的copy_if吗?

谢谢

c++ arrays copy stdstring
1个回答
6
投票

你需要使用std::back_inserter

#include <iterator>

std::copy_if(buffer1.begin(), buffer1.end(), back_inserter(buffer2), [](char c){
        //don't copy spaces
        return c != ' ';
});

back_inserter(buffer2)返回一个专门的迭代器,它不会覆盖buffer2的元素。

为了使其正常工作,您必须确保从空buffer2开始。即不要使用:

 buffer2.resize(buffer1.length());
© www.soinside.com 2019 - 2024. All rights reserved.