我正在尝试找到一种将 vector 元素复制到另一个 vector 的方法。

int main()
{
  std::vector<int> aVec{0,1,2,3,4};
  std::vector<int>::iterator itBegin = aVec.begin();
  std::vector<int>::iterator itEnd = aVec.begin()+3;

  std::vector<int> aVecNew;
  // How to insert elements ranging from itBegin till itEnd(including itEnd) to
  // the vector aVecNew

  return 0;

}

大多数插入方法似乎不包含itEnd。有一种干净的方法可以做到这一点吗?

编辑:如果我不确定++ itEnd是否为结束迭代器。在这种情况下,它将失败。有没有更安全的方法呢?

最佳答案

您可以使用std::copy中的<algorithms>std::back_inserter中的<iterator>:

int main(int a, char**){
  std::vector<int> aVec{ 0, 1, 2, 3, 4 };
  std::vector<int>::iterator itBegin = aVec.begin();
  std::vector<int>::iterator itEnd = aVec.begin() + 3;

  std::vector<int> aVecNew;
  std::copy(itBegin, itEnd, std::back_inserter(aVecNew));
  return 0;
}

PS:另外,正如注释中提到的那样,此代码复制了不包含itEnd的内容。如果要复制包括itEnd的元素,只需将其值增加1:
int main(int a, char**){
  std::vector<int> aVec{ 0, 1, 2, 3, 4 };
  std::vector<int>::iterator itBegin = aVec.begin();
  std::vector<int>::iterator itEnd = aVec.begin() + 3;

  std::vector<int> aVecNew;
  std::copy(itBegin, ++itEnd, std::back_inserter(aVecNew));
  return 0;
}

有关back_insertercopy的一些文档。

10-06 12:44