gpt4 book ai didi

c++ - 在不创建新子 vector 的情况下获取 vector 范围

转载 作者:行者123 更新时间:2023-11-28 02:01:13 25 4
gpt4 key购买 nike

我正在尝试创建一个递归函数,每次它都接受一个 vector ,如下所示:

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 时传递一个 vector 。但是我必须创建两个临时 vector first_tempsecond_temp,因为我不知道如何在不创建新的临时 vector 来保存它的值。

有没有一种方法我不需要创建持有人 vector ?像 main_vector[0:n] 之类的?

最佳答案

传统方式是使用迭代器作为范围:

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 .......
}

关于c++ - 在不创建新子 vector 的情况下获取 vector 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com