使用 copy_if 复制 std::string (到另一个字符串中)
Copy a std::string using copy_if (into another string)
我想知道从一个字符串到另一个字符串的选择性 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)
returns 一个专门的迭代器,它附加而不是覆盖 buffer2
.
的元素
要使其正常工作,您必须确保从空 buffer2
开始。即不要使用:
buffer2.resize(buffer1.length());
我想知道从一个字符串到另一个字符串的选择性 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)
returns 一个专门的迭代器,它附加而不是覆盖 buffer2
.
要使其正常工作,您必须确保从空 buffer2
开始。即不要使用:
buffer2.resize(buffer1.length());