На странице std :: inplace_merge по адресу cppreference.com приведен пример использования inplace_merge для сортировки слиянием. Мой вопрос связан с тем, как они реализовали сортировку слиянием с аргументами шаблона для типа итератора.
Когда вызывается merge_sort в главной функции, аргумент не передается, чтобы сказать, какой тип итератора мы используем. Тем не менее, я скомпилировал этот код, и он работает нормально. Почему вы не должны указывать merge_sort, какой итератор мы используем? Как бы ты это сделал?
#include <vector>
#include <iostream>
#include <algorithm>
template<class Iter>
void merge_sort(Iter first, Iter last)
{
if (last - first > 1) {
Iter middle = first + (last - first) / 2;
merge_sort(first, middle);
merge_sort(middle, last);
std::inplace_merge(first, middle, last);
}
}
int main()
{
std::vector<int> v{8, 2, -2, 0, 11, 11, 1, 7, 3};
merge_sort(v.begin(), v.end()); // <----------------- ?
for(auto n : v) {
std::cout << n << ' ';
}
std::cout << '\n';
}