std::generate_n 带有列表的函数
std::generate_n function with list
我正在制作一个使用std::generate_n
函数的程序。我可以让它在数组中正常工作,但我无法弄清楚如何让它与列表容器一起使用。这是我所拥有的:
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
int current = 0;
int UniqueNumber () { return ++current; }
int main ()
{
list<int> L;
list<int>::iterator it;
generate_n (L.begin(), 9, UniqueNumber);
cout << "list contains:";
for (it=L.begin(); it!=L.end(); ++it)
cout << ' ' << *it << 'n';
return 0;
}
输出仅显示"列表包含:",之后没有任何内容。我知道我的输出循环功能正确,因为我使用 insert() 方法手动尝试了它,所以问题出在 generate_n 函数上。我想我把论点传递错了。有人知道我做了什么吗?
您希望使用插入迭代器将项目添加到列表中:
generate_n (back_inserter(L), 9, UniqueNumber);
请务必#include <iterator>
使用它。另一种可能性是使用std::iota
:
list<int> L(10);
std::iota(L.begin(), L.end(), 1);
哦,要显示列表的内容,您可能需要:
std::copy(L.begin(), L.end(), ostream_iterator<int>(std::cout, "n"));
或(在C++11 中):
for (auto i : L)
std::cout << ' ' << i << 'n';
generate_n
不insert
,它只是取消引用和赋值。
请参阅下面可能的generate_n
实现(从此处复制):
template< class OutputIt, class Size, class Generator >
OutputIt generate_n( OutputIt first, Size count, Generator g )
{
for( Size i = 0; i < count; i++ ) {
*first++ = g();
}
return first;
}
因此,在调用列表之前,您需要确保列表的大小合适。
因此,更改:
list<int> L;
自:
list<int> L(9);
相关文章:
- 一对向量构造函数:初始值设定项列表与显式构造
- C++:如何使函数只返回作为列表一部分的字符串
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 运行相同函数名称C++的多个类的列表
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C++模板函数中的初始化 - 新的初始值设定项表达式列表被视为复合表达式
- std::vector 没有重载函数的实例与参数列表匹配
- 从封装在对象中的函数 C++ 返回时为空的列表
- 构造函数/函数声明参数列表中的统一初始化
- C++:继承和列表函数作为类成员的问题
- 我一直在尝试递归中编写一个分类的链接列表函数
- C++列表函数返回列表
- 列表函数未按预期工作
- C++链表/多态性未运行列表函数
- 这是一个具有基于数组的列表函数的数据结构项目,我似乎无法摆脱这个无限循环。
- 多集作为类模板,使用列表函数作为基础
- Boost::mpl类型列表函数应用程序
- 这个变量参数列表函数调用是如何工作的
- C++STL列表函数使用空列表分段
- STL 列表数组无法访问列表函数