识别容器的类型并用C ++

时间:2015-10-02 14:21:51

标签: c++ generics iterator containers

我的问题在于我正在进行优化的自下而上(迭代)合并排序。为了节省一些计算,我需要一个与输入范围长度相同的缓冲区。我的目标是我的实现不仅可以排序数组,还可以排序任意容器(std::vectorstd::array,甚至std::list,如果需要的话)。

所以,我的主要问题是: 使用泛型,我如何不仅复制传递给排序的内容,还复制传递给它的结构。当然,我不想明确处理容器类型,而是能够复制数据和保存数据的数据结构。

注意:我的目标也是提出可以接受任何输入std::stable_sort的实现。

注2 :基本上,给定

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

我希望Containerfirst具有相同的容器类型,last来自;这首先是可能的吗?

(不要问我为什么要这样做;原因很好。)

1 个答案:

答案 0 :(得分: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]);