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?

相关文章

首先GDB是类unix系统下一个优秀的调试工具, 当然作为debug代...
1. C语言定义1个数组的时候, 必须同时指定它的长度.例如:int...
C++的auto关键字在C+⬑新标准出来之前基本...
const关键字是用于定义一个不该被改变的对象,它的作用是告诉...
文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...