У меня есть 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.