У меня есть std::vector
, и я хочу отдельный std::vector
, содержащий только последние n элементов исходного вектора. Помимо петли над всем вектором, вставляемым один за другим, есть ли более чистый способ сделать это?
Как получить вектор, содержащий только последние n элементов другого вектора?
Ответ 1
int n = 5;
std::vector<int> x = ...;
std::vector<int> y(x.end() - n, x.end())
Конечно, это приведет к сбою и сгоранию, если x.size() <n
Для пояснения немного, std::vector
(как и большинство стандартных контейнеров библиотеки) имеет конструктор, который принимает пару итераторов. Он заполняет вектор всеми элементами от первого итератора до второго.
Ответ 2
Вы можете copyVector
напрямую, используя конструктор двух итераторов:
std::vector<int> original = ...;
std::vector<int>::iterator start = std::next(original.begin(), M);
std::vector<int> copyVector(start, original.end());
или используйте метод присвоения std::vector
:
std::vector<int>::iterator start = std::next(original.begin(), M);
std::vector<int> copyVector = ... ;
...
copyVector.assign(start, original.end());
где M
вычисляется из original.size()
и n
.