[英]Inserters in C++ confusion
所以我不明白在这种情况下如何使用插入器。 我知道什么是插入器,我知道 std::front_inserter 和 std::back_inserter 和 std::inserter 但我对这个问题感到困惑,我现在将提出这个问题。 我需要制作函数,它将转换向量的元素并将它们放入双端队列(或向量无所谓,无论如何它的“通用”函数)。 该函数有5个参数,其中一个是另一个函数(只能有一个参数,没有指定什么类型(我的意思是它可以是引用,迭代器,指针......等等))。
如果我的向量是:
std::vector<int> v={1,2,3,4,5};
我需要使用 lambda 函数进行一些修改,这将使我的双端队列具有如下元素:
25 16 9 4 1
所以你看到 deque 的第一个元素是 vector ^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) );
假设我在 main 中有以下代码:
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 */);
如果您只对转换感兴趣,而不对实现该类型的函数感兴趣,
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;});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.