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

前端之家收集整理的这篇文章主要介绍了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&C++相关文章