Подтвердить что ты не робот

Как получить вектор, содержащий только последние n элементов другого вектора?

У меня есть std::vector, и я хочу отдельный std::vector, содержащий только последние n элементов исходного вектора. Помимо петли над всем вектором, вставляемым один за другим, есть ли более чистый способ сделать это?

4b9b3361

Ответ 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.