加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:01:30 所属栏目:百科 来源:网络整理
导读:在我的任务:)尽可能多地使用STL我想知道是否可以使用std :: generate和std :: back_inserter组合,以便我可以执行与以下代码相同的操作: static const size_t nitems=1024*1024;std::string mrbig;for (size_t pos=0; posnitems; ++pos) mrbig.push_back('a'
在我的任务:)尽可能多地使用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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读