在不创建新子向量的情况下获取向量的范围
Getting range of vector without creating a new subvector
我试图创建一个递归函数,每次它接受一个向量,像这样:
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
中提取这个范围,而不创建一个新的临时向量来保存它的值。
是否有一种方法,我不需要创建持有人向量?比如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这样的库,你可以直接使用range:
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++排序的情况下找到给定向量中的第一、第二和第三高值?
- 如何在不复制的情况下将一个向量移动到另一个向量中
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 在无法访问向量的情况下查找迭代器的末尾
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 我怎样才能在不重复的情况下随机迭代向量的每个元素
- 调整向量大小并检索值,这是否正确或在任何情况下都可能导致段错误?
- 如何在不迭代的情况下从string_view向量创建字符串向量?
- 如何在不以不同方式创建每个向量的情况下制作 2-D 向量列表?
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- 是否可以在不指定类型的情况下从 istringstream 转到向量?
- 在不使用递归的情况下求解所有 2D 字符串向量组合?(C++)
- 如何在不复制的情况下将向量向量从类函数传递到功能
- 如何在<typename> <long> 不更改给定代码的情况下将自定义向量与 STL 向量相互转换?
- 我可以在不循环访问数组/向量的情况下检查数组/向量中的单词吗?
- 如何在使用和无发现的情况下使用和不使用的字符串向量搜索元素
- 您可以在没有列表或向量的情况下循环访问类对象吗?
- 如何在给定迭代器列表的情况下从向量中删除元素
- 一般情况下,在 cv::Mat 或 cv::Mat 的向量上进行 omp 还原