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

标签 c++ vector

假设我有一个大小为 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/

相关文章:

c++ - 我的指针损坏了,我不知道为什么

c++ - 在 Windows 中将 VS2005 静态库与 gcc 链接

C++ 什么时候可以扩展 `std` 命名空间?

c++ - 无法遍历 vector

c++ - std::vector::emplace_back 和 std::move

c++ - FFmpeg 潜在的内存泄漏行为点。有这样的吗?

c++ - 如何为数组编写 setter 和 getter? (c++)

c++ - 从 vector 的元素初始化结构

r - 找到所有相邻的组合

c++ - 函数结束后丢失指针数据