如何使用一对迭代器 [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);
}
但是,我尝试使用模板,我发现我不知道如何使用 first
和 last
来创建 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 的向量。这不是原始容器类型,但它会为您提供所需的临时容器。
我写了一个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);
}
但是,我尝试使用模板,我发现我不知道如何使用 first
和 last
来创建 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 的向量。这不是原始容器类型,但它会为您提供所需的临时容器。