如何使用一对迭代器 [first, last) 在模板中创建容器?

How to use a pair of iterators [first, last) to create a container in the template?

我写了一个MergeSort函数,声明如下:

void MergeSort(
    std::vector<int>::iterator first,
    std::vector<int>::iterator last) {
  // Get the same size as nums, so we can use some stable iteartors later.
  std::vector<int> tmp_vector(last - first);
  Sort(first, last, tmp_vector.begin());
  std::copy(tmp_vector.begin(), tmp_vector.end(), first);
}

但是,我尝试使用模板,我发现我不知道如何使用 firstlast 来创建 tmp_vector 而我只知道 RandomIterator:

template <typename RandomIterator>
void MergeSort(
    RandomIterator first,
    RandomIterator last) {
  // Get the same size as nums, so we can use some stable iteartors later.
  // How to create tmp_vector?
  mergesort::Sort(first, last, tmp_vector.begin());
  std::copy(tmp_vector.begin(), tmp_vector.end(), first);
}

据说it is not possible to get the type of the container of the iterators,有什么想法吗?谢谢!

您可以创建迭代器 value_type 的向量。这不是原始容器类型,但它会为您提供所需的临时容器。