Моя проблема в том, что я работаю над оптимизированной восходящей (итеративной) сортировкой слиянием. Чтобы сохранить некоторые вычисления, мне нужен буфер такой же длины, что и входной диапазон. Моя цель состоит в том, чтобы моя реализация могла сортировать не только массивы, но и произвольные контейнеры (std::vector
, std::array
, или даже std::list
при необходимости).
Так, мой главный вопрос:
Используя дженерики, как я могу скопировать не только контент, переданный в сортировку, но и скопировать структуру, которая была ему передана. Конечно, я не хочу явно иметь дело с типами контейнеров, а скорее иметь возможность реплицировать данные и структуру данных, содержащую данные.
ЗаметкаМоя цель также состоит в том, чтобы придумать реализацию, которая может принять любой вклад std::stable_sort
Можно.
Заметка 2: Так в основном, учитывая
template<class _RandomAccessIterator>
void sort(_RandomAccessIterator first, _RandomAccessIterator last) {
Container<...> buffer = ...;
}
Я хочу Container
быть того же типа контейнера, что и first
а также last
вычисляются из; это возможно в первую очередь?
(Не спрашивайте меня, почему я хочу сделать это таким образом; причина хорошая.)
Вы можете просто использовать контейнеры в качестве аргумента функции, а затем скопировать их с их operator=
:
template <class Container>
void sort (Container &c) {
auto copy = c; // Copied the container
//
}
Если вы также хотите обрабатывать C-массивы, просто добавьте для них перегрузку:
template<class T, std::size_t N >
void sort(T (&arr)[N]);
Других решений пока нет …