Use*_*ser 1 c++ stdlist visual-c++-2010
如果N> =列表大小(并处理N = 0),获取作为std :: list的前N个元素或整个列表的新列表的正确和安全的方法是什么?
更新
实际上我不一定需要新的列表,我只想在后续代码中对列表的子集进行操作.我假设创建一个新列表是一种合理的方法(注意列表大小通常低于50).
std::list<int> a;
size_t n = 13;
auto end = std::next(a.begin(), std::min(n, a.size()));
Run Code Online (Sandbox Code Playgroud)
创建一个包含第一个列表的前n个元素的新列表:
std::list<int> b(a.begin(), end);
Run Code Online (Sandbox Code Playgroud)
或者填充现有列表:
std::list<int> b;
std::copy(a.begin(), end, std::back_inserter(b));
Run Code Online (Sandbox Code Playgroud)
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))};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4709 次 |
| 最近记录: |