提升范围转换需要 const &
作为参数范围。
#include <iostream>
#include <vector>
#include <boost/range/algorithm.hpp>
int main(int argc, char *argv[])
{
using namespace std;
vector<vector<int>> rt0(10,vector<int>(15,2));
vector<vector<int>> irt(10,vector<int>(15,5));
for(auto & i:rt0) {
for(auto& j:i) cout << j << " ";
cout << "\n";
}
cout << "\n";
for(auto & i:irt) {
for(auto& j:i) cout << j << " ";
cout << "\n";
}
boost::transform(rt0,irt,rt0.begin(),
[] (const vector<int> &t0,const vector<int> &it) {
auto tt = t0;
boost::transform(t0,it,tt.begin(), plus<int>());
return tt;
}
);
cout << "\n";
cout << "\n";
for(auto & i:rt0) {
for(auto& j:i) cout << j << " ";
cout << "\n";
}
return 0;
}
编译运行
g++ -std=c++11 main.cc; ./a.out
如果 boost::transform
的 BinaryOperation
为 SinglePassRange1 使用
那么我就不需要创建一个拷贝 (&
而不是 const &
auto tt = t0
),只需使用 to
而不是 tt
。有没有办法避免创建此复制(同时仍在使用范围)?
最佳答案
我需要将 for_each
与元组或采用两个参数的新 boost 实现一起使用。
概念上 transform
不应修改。它来自没有就地修改的函数式编程。
关于c++ - 如何避免在提升范围变换中复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247026/