我正在尝试创建一个递归函数,每次它接受一个向量,如下所示:
std::vector<int> mergesort(std::vector<int> &main_vector)
{
//.......... rest of code .......
middle = get_midpoint(unsorted_vector);
first_temp.insert(first_temp.begin(), main_vector.begin(), middle);
second_temp.insert(second_temp.begin(), middle, main_vector.end());
first_half = mergesort(first_temp);
second_half = mergesort(second_temp);
//.......... rest of code .......
return main_vector;
}
这里我每次再次调用函数mergesort
时都试图传递一个向量。但是我必须创建两个临时向量first_temp
和second_temp
,因为我不知道如何从main_vector
中提取该范围而不创建新的临时向量来保存其值。 / p>
有没有办法让我不需要创建持有人向量?像main_vector[0:n]
或其他什么?
答案 0 :(得分:2)
传统方式是使用迭代器作为范围:
template <typename Iterator>
void mergesort(Iterator begin, Iterator end)
{
const auto middle = get_midpoint_it(begin, end);
// .......... rest of code .......
mergesort(begin, middle);
mergesort(middle, end);
// .......... rest of code .......
}
将某个库设为range-v3,您可以直接使用范围:
template <typename Range>
void mergesort(Range&& range)
{
const auto middle = get_midpoint_index(range);
// .......... rest of code .......
mergesort(range | ranges::view::slice(0, middle));
mergesort(range | ranges::view::slice(middle, (int) range.size()));
// .......... rest of code .......
}