我希望以类似std :: transform的方式将值插入到std :: vector中。 std :: transform需要一个预先设定的第三个参数,但在我的情况下,大小取决于变换器()并且是不可预测的。
db.movies.explain().update({your_query})
是否有std:transform-ish方法将值插入std :: vector?
答案 0 :(得分:4)
您不需要预先调整要用变换填充的向量。使用std::back_inserter
它将像向量的迭代器一样,但实际上会调用push_back()
将元素插入到向量中。
所以你的代码看起来像
std::vector<int> new_args;
std::transform(args.begin(),args.end(),std::back_inserter(new_args),transformers());
答案 1 :(得分:2)
您可以使用std::back_inserter
使用.push_back
向向量添加值:
std::vector<int> new_args;
std::transform(args.begin(),args.end(),std::back_inserter(new_args),transformers());
BTW:std::vector<int> new_args();
是一个函数声明。您可以使用std::vector
std::vector<int> new_args;
答案 2 :(得分:0)
感谢上帝,那里有boost :: range。
由于输入和输出的大小和类型不同,std :: copy_if和std :: transform没有帮助。
#include <boost/range/adaptor/filtered.hpp>
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/algorithm_ext/push_back.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
struct is_even
{
bool operator()(int x) const {return x%2==0;}
};
struct to_square_root
{
float operator()(int x) const {return std::sqrt(x);}
};
int main(int argc, const char* argv[])
{
std::vector<int> input={1,2,3,4,5,6,7,8,9};
std::vector<float> output;
boost::push_back (
output
, input
| boost::adaptors::filtered(is_even())
| boost::adaptors::transformed(to_square_root())
);
for(auto i: output) std::cout << i << "\n";
}