C++混乱中的机械臂

Inserters in C++ confusion

本文关键字:机械 混乱 C++      更新时间:2023-10-16

所以我不明白在这种情况下如何使用机械臂。我知道什么是插入器,我知道std::front_inserter和std::back_inserter和std::inserter,但我对我现在将要提出的这个问题感到困惑。 我需要制作函数,它将转换向量的 elemets 并将它们放入 deque(或者向量没关系,无论如何它的"通用"函数)。 该函数有 5 个参数,其中一个是另一个函数(只能有一个参数,没有指定什么类型(我的意思是它可以是引用、迭代器、指针......随便))。

如果我的向量是:

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

我需要对lambda函数进行一些修改,这将使我的deque具有这样的元素:

25 16 9 4 1

所以你看到deque的第一个元素是向量^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;});