繁体   English   中英

C++ 中的插入器混淆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM