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



我想知道有选择地将字符从一个字符串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 的结束迭代器将指向空终止字符。我用谷歌搜索了一下,显然这是设计使然,所以现在我想知道我不应该将copy_if与字符串一起使用吗?

谢谢

你需要使用 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());

相关内容

  • 没有找到相关文章

最新更新