Так что я не понимаю, как использовать вставки в этой ситуации.Я знаю, что такое вставки, я знаю о std :: front_inserter и std :: back_inserter и std :: insertter, но я запутался в этой проблеме, которую я сейчас представлю.Мне нужно сделать функцию, которая преобразует элементы вектора и помещает их в deque (или, в любом случае, вектор, его универсальная функция).Эта функция имеет 5 параметров, одна из которых является другой функцией (которая может иметь только один параметр, но не указано, какой тип (я имею в виду, что это может быть ссылка, итератор, указатель ... и т. Д.)).
Если мой вектор:
std::vector<int> v={1,2,3,4,5};
Мне нужно внести некоторые изменения с помощью лямбда-функции, которая позволит моему деку иметь такие элементы:
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) );
Допустим, у меня есть следующий код в 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 */);