Как правильно и безопасно получить новый список, который является первыми N элементами std :: list или всего списка, если N> = размер списка (и обрабатывает также N = 0)?
Обновить
На самом деле мне не обязательно нужен новый список, я просто хочу работать с подмножеством списка в последующем коде. Я полагаю, что создание нового списка — разумный способ сделать это (размер списка заметок обычно не превышает 50).
std::list<int> a;
size_t n = 13;
auto end = std::next(a.begin(), std::min(n, a.size()));
Создайте новый список, содержащий первые n элементов первого списка:
std::list<int> b(a.begin(), end);
Или заполните существующий список:
std::list<int> b;
std::copy(a.begin(), end, std::back_inserter(b));
template<typename T>
std::list<T> first_n(const std::list<T> &in, std::size_t n) {
return std::list<T> out{in.begin(),
std::next(in.begin(), std::min(in.size(), n))};
}
// list<int> input;
list<int> output;
for (list<int>::const_iterator i = input.begin(); i != input.end() && N > 0; ++i, --N)
output.push_back(*i);