我正在尝试找到一种将 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_inserter和copy的一些文档。