使用copy_if将std :: string复制到另一个字符串中

Pro*_*rof 0 c++ arrays copy stdstring

我想知道什么是选择性地将_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 != ' ';
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢

joh*_*ohn 6

您需要使用std :: back_inserter

#include <iterator>

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

back_inserter(buffer2)返回一个专门的迭代器,该迭代器附加到,而不是覆盖的元素buffer2

为了使它正常工作,您必须确保以empty开头buffer2。即不要使用:

 buffer2.resize(buffer1.length());
Run Code Online (Sandbox Code Playgroud)