C ++混乱中的插入器

时间:2019-04-21 16:04:27

标签: c++ inserter

所以我不明白在这种情况下如何使用插入器。我知道什么是插入程序,我知道std :: front_inserter和std :: back_inserter和std :: inserter,但是现在我将对这个问题感到困惑。 我需要制作函数,该函数将转换vector的要素并将其置于双端队列(或者向量没关系,无论如何,其“通用”函数)。 该函数有5个参数,其中一个是另一个函数(只能有一个参数,没有指定类型(我是说它可以是引用,迭代器,指针……等等))。

如果我的向量是:

std::vector<int> v={1,2,3,4,5};

我需要使用lambda函数进行一些修改,这会使我的双端队列具有以下元素:

25 16 9 4 1

因此,您看到双端队列的第一个元素是向量^ 2的最后一个元素(您可以看到我想做什么)。 所以我的问题是: 如何使用插入器解决问题?我的意思是我应该以某种方式将插入器放入Lambda功能吗?也许lambda应该是这样的:

[](int x) { 
x=x*x;
std::front_inserter(q);
}

我正在考虑这一点,但是当我将其作为此“大”函数的参数发送时,我不理解该lambda将如何工作?如何知道大函数中的q是什么?

希望您能理解我想做什么。

这里是示例。 所以我必须做一些功能,这是原型(可以说是无效的):

typename<template Type1, template Type2>
void Fun(Type1 p1,Type1 p2,Type2 p3,Type2 p4,void (*f)(std::remove_reference<decltype(*p1)>::type) );

让我们说我的主代码如下:

int main() {
std::vector<int> v={1,2,3,4,5};
std::deque<int> d(5);
Fun(v.begin(),v.end(),d.begin(),d.end(), /* some lambda function */);

1 个答案:

答案 0 :(得分:2)

如果您只对转换感兴趣,而对实现该类型的函数不感兴趣,

std::deque<int> d;
std::transform(v.begin(), v.end(), std::front_inserter(d), [](int x){return x * x;});

std::deque<int> d;
std::transform(v.rbegin(), v.rend(), std::back_inserter(d), [](int x){return x * x;});