Вставки в C++ путаница

Поэтому я не понимаю, как использовать вставки в этой ситуации. Я знаю, что такое вставки, я знаю о std:: front_inserter и std:: back_inserter и std:: insertter, но я запутался в этой проблеме, которую я сейчас представлю. Мне нужно сделать функцию, которая преобразует элементы вектора и помещает их в deque (или, в любом случае, вектор, его универсальная функция). Эта функция имеет 5 параметров, одна из которых является другой функцией (которая может иметь только один параметр, но не указано, какой тип (я имею в виду, что это может быть ссылка, итератор, указатель... и т. Д.)).

Если мой вектор:

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

Мне нужно сделать некоторую модификацию с помощью лямбда-функции, которая позволит моему deque иметь такие элементы:

25 16 9 4 1

Итак, вы видите, что первый элемент deque - это последний элемент вектора ^2 (вы можете видеть, что я хочу сделать). Итак, мой вопрос: как можно решить проблему с помощью вставок? Я имею в виду, должен ли я как-то поместить модуль ввода в лямбда-функцию? Может быть, лямбда должна быть такой:

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

Я думал об этом, но потом я не понимаю, как будет работать эта лямбда, когда я посылаю ее в качестве параметра этой "большой" функции? Как он узнает, что такое q внутри большой функции?

Я надеюсь, вы понимаете, что я хочу сделать.

Вот пример. Итак, я должен сделать некоторую функцию, и это прототип (допустим, это void):

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 ответ

Если вы заинтересованы только в преобразовании, а не в реализации функции с этим типом,

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;});
Другие вопросы по тегам