gpt4 book ai didi

c++ - 将 vector 的一部分传递给 C++ 中的函数

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

假设我有一个大小为 1000 的 vector 。我想将该 vector 的一部分传递给此函数:

template <typename T>
void insertion_sort (vector<T> &a) { // vector: pg 1012; & (reference): pg 383
for (long int i = 1; i < a.size(); i++) {
for (long int j = i; (j > 0) && (a[j] < a[j-1]); j--) {
std::swap(a[j], a[j-1]);
}
}
}

假设我想对 100-1000 的 vector 进行排序。我会像这样传入函数吗:

insertion_sort(&a[100]);

我尝试使用迭代器,但函数不接受它。在这种情况下,恐怕调用 size() 时,它会是 1000 而不是 900。

实现此目标的最佳方法是什么?

最佳答案

如果您不能修改函数,前提是您可以创建 vector 的拷贝,将其传递给函数并复制回来:

std::vector<int> v( 1000 );
auto it = v.begin();
std::advance( it, 100 );
std::vector<int> tmp( it, v.end() );
insertion_sort( tmp );
std::copy( tmp.begin(), tmp.end(), it );

或者您可以删除前 100 个元素,对 vector 进行排序并将它们放回去:

std::vector<int> v( 1000 );
auto it = v.begin();
std::advance( it, 100 );
std::vector<int> tmp( v.begin(), it );
v.erase( v.begin(), it );
insertion_sort( v );
v.insert( v.begin(), tmp.begin(), tmp.end() );

否则当前编写的函数不提供对 vector 进行部分排序的方法。为了支持它应该像大多数标准算法一样编写 - 接受 2 个迭代器的范围:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

关于c++ - 将 vector 的一部分传递给 C++ 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922082/

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