3

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

更新

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

4

3 回答 3

9
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));
于 2013-04-09T15:40:11.650 回答
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))};
}
于 2013-04-09T15:41:05.487 回答
4
// 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);
于 2013-04-09T15:38:57.577 回答