generics — распознавание типа контейнера и копирование его в переполнение стека

Моя проблема в том, что я работаю над оптимизированной восходящей (итеративной) сортировкой слиянием. Чтобы сохранить некоторые вычисления, мне нужен буфер такой же длины, что и входной диапазон. Моя цель состоит в том, чтобы моя реализация могла сортировать не только массивы, но и произвольные контейнеры (std::vector, std::array, или даже std::list при необходимости).

Так, мой главный вопрос:
Используя дженерики, как я могу скопировать не только контент, переданный в сортировку, но и скопировать структуру, которая была ему передана. Конечно, я не хочу явно иметь дело с типами контейнеров, а скорее иметь возможность реплицировать данные и структуру данных, содержащую данные.

ЗаметкаМоя цель также состоит в том, чтобы придумать реализацию, которая может принять любой вклад std::stable_sort Можно.

Заметка 2: Так в основном, учитывая

template<class _RandomAccessIterator>
void sort(_RandomAccessIterator first, _RandomAccessIterator last) {
Container<...> buffer = ...;
}

Я хочу Container быть того же типа контейнера, что и first а также last вычисляются из; это возможно в первую очередь?

(Не спрашивайте меня, почему я хочу сделать это таким образом; причина хорошая.)

0

Решение

Вы можете просто использовать контейнеры в качестве аргумента функции, а затем скопировать их с их 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]);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]