19

我有一个std::vector,我想要一个单独std::vector的,只包含原始向量的最后 n 个元素。除了在整个向量上循环插入一个接一个之外,还有更清洁的方法吗?

4

2 回答 2

27
int n = 5;
std::vector<int> x = ...;
std::vector<int> y(x.end() - n, x.end())

当然,如果 x.size() < n 这将崩溃并烧毁

稍微详细一点,std::vector(像大多数标准库容器一样)有一个构造函数,它接受一对迭代器。它用从第一个迭代器到第二个迭代器的所有项目填充向量。

于 2012-07-30T16:05:13.183 回答
1

您可以copyVector直接使用两个迭代器构造函数进行构造:

std::vector<int> original = ...;
std::vector<int>::iterator start = std::next(original.begin(), M);
std::vector<int> copyVector(start, original.end());

或使用std::vector's assign方法:

std::vector<int>::iterator start = std::next(original.begin(), M);
std::vector<int> copyVector = ... ;
...
copyVector.assign(start, original.end());

其中Moriginal.size()和计算n

于 2012-07-30T16:07:33.877 回答