Вставки в 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;});