c – 这是组合std :: generate_n和std :: back_inserter的正确方法吗?

在我的任务:)尽可能多地使用STL我想知道是否可以使用std :: generate和std :: back_inserter组合,以便我可以执行与以下代码相同的操作:
static const size_t nitems=1024*1024;
std::string mrbig;
for (size_t pos=0; pos<nitems; ++pos)
    mrbig.push_back('a'+ (rand()%26));

我试过了

std::generate_n(std::back_inserter(mrbig),nitems,[](){return 'a'+(rand()%26);});

它似乎工作正常,但我想确保我没有弄乱一些东西.

解决方法

generate_n要求其第一个参数满足 OutputIterator,back_insert_iterator(其iterator_category为 output_iterator_tag).

您的代码可能存在的问题:

std::generate_n(std::back_inserter(mrbig),[](){return 'a'+(rand()%26);});

>调用mrbig.reserve(nitems)会更有效率
>您应该使用< random>中的c++03 std :: rand或c++11 uniform_int_distribution<>.而不是c兰特.
> lambda捕获和lambda体之间的括号()对于不带参数的lambda是不必要的,尽管有些人更喜欢它们
>不保证在实现字符集中字母a-z形成一个连续的块;例如,in EBCDIC,i and j are not adjacent.我相信唯一可移植的形式是在你的程序中存储一个字符串“abcd … xyz”并将其编入索引:How can I write a single for loop running from a to z and A to Z in C?

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...