Я пытался протестировать некоторые простые функции сортировки в стиле C. В программе драйвера я написал что-то вроде этого:
int main()
{
std::array<int, 8> A = { 1, 0, 4, 5, 7, 2, 9, 3 };
auto lambda = [&A](const std::function<void(int *A, int n)> &sorting_alg) {
int n = A.size();
sorting_alg(A.data(), n);
std::cout << "=> ";
print(A.data(), n);
std::cout << std::endl;
};
auto do_bubble_sort = std::bind(lambda, bubble_sort);
auto do_selection_sort = std::bind(lambda, selection_sort);
auto do_insertion_sort = std::bind(lambda, insertion_sort);
std::cout << "Bubble Sort :" << std::endl;
do_bubble_sort();
std::cout << "Selection Sort :" << std::endl;
do_selection_sort();
std::cout << "Insertion Sort :" << std::endl;
do_insertion_sort();
return 0;
}
У меня был код привязки, которому я мог передать A
для копирования, но он ограничивает мою лямбду size=8
, которую я хочу избегать. Можно ли добиться этого, не используя что-то вроде std::vector
, et c? Как только я изменяю метод захвата A
на захват значений, он больше не компилируется. Я хотел использовать копии для массива, чтобы проверить все функции сортировки. Почему я не могу захватить std::array
по значению? Почему тогда определение размера работает для контрольного случая?