如何使用STL的copy()从现有向量创建新向量?

Chr*_*ris 0 c++ stl

假设我有一个带有10个元素的std::vector调用vec,我想创建一个std::vector包含vec的第2和第5个元素之间(包括)的所有元素的新元素.我可以看到我如何写一个for循环来做到这一点,但看起来STL copy()可以更简洁地做到这一点.但我并没有真正得到迭代器:我已经看到你如何使用start()end()迭代从第一个元素到最后一个元素的向量,但是上面的情况如何,我想要一些略有不同的东西?谢谢.

Con*_*ius 9

您不需要使用第一个子集std::copy创建新的vector.您可以使用vector构造函数及其迭代器(此处为doc)来实现此目的:

std::vector<myType> vec = ...;
std::vector<myType> other(vec.begin() + 1, vec.begin() + 5);
Run Code Online (Sandbox Code Playgroud)

但是你必须确定,你没有超过vector限制,否则你将得到未定义的行为.

  • 要包含第5个元素,你需要`+ 5`而不是'+ 4`. (3认同)
  • @Chris你可以对`std :: vector`的迭代器进行算术运算.这不是迭代器的通用属性; 只有随机访问迭代器才支持加法和减法. (3认同)