Вариадическая функция для перехода через картезианский продукт нескольких пролетовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вариадическая функция для перехода через картезианский продукт нескольких пролетов

Сообщение Anonymous »

span упоминается к непрерывной памяти, например, массив;

Код: Выделить всё

template 
class Span {
public:
Span(T first, size_t s) ...;
Span(T first, T lasst) ...;
public:
// iterating underlying continuous memory;
begin() ...
end() ...
T & operator[](idx) ...
private:
T first;
T last;
};
< /code>
Функция петли может итерация всех проходящих пролетов, например, вложенная петля пузырька; < /p>
template 
void loop(Func func, Spans &&...spans) {
// question: how to implements ?
}
< /code>
Пример < /p>
int main() {
int arr[] {1, 2, 3};
float arr2[] {1.1, 2.2};
int arr3[] {-1, -2, -3};

loop(func, Span(arr, 3), Span(arr2, 2));
/*
we can get:
func(1, 1.1);
func(1, 2.2);
func(2, 1.1);
func(2, 2.2);
func(3, 1.1);
func(3, 2.2);
*/

loop(func, Span(arr, 3), Span(arr2, 2), Span(arr3, 3));
/*
we can get:
func(1, 1.1, -1);
func(1, 1.1, -2);
func(1, 1.1, -3);
func(1, 2.2, -1);
func(1, 2.2, -2);
func(1, 2.2, -3);
func(2, 1.1, -1);
func(2, 1.1, -2);
...
*/
}
Как реализовать функцию цикла, используя языковые функции C ++ до C ++ 20, но нет стандартной библиотеки или библиотеки 3-го часа, просто реализует вручную;
< Br /> Нет вызовов функции рекурсии, лучше для Loop; причина рекурсии легко получить переполнение стека;
Использование вектора и кортежей, структурное связывание в порядке;

Подробнее здесь: https://stackoverflow.com/questions/794 ... iple-spans
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»