获取std :: list的前N个元素?

时间:2013-04-09 15:35:53

标签: c++ visual-c++-2010 stdlist

如果N&gt; =列表大小(并且处理N = 0),获取作为std :: list的前N个元素的新列表或整个列表的正确且安全的方法是什么?< / p>

更新

实际上我不一定需要新的列表,我只想在后续代码中对列表的子集进行操作。我假设创建一个新列表是一种合理的方法(注意列表大小通常低于50)。

3 个答案:

答案 0 :(得分:7)

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));

答案 1 :(得分:6)

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))};
}

答案 2 :(得分:3)

// 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);