[英]Is this correct way to combine std::generate_n and 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),nitems,[](){return 'a'+(rand()%26);});
mrbig.reserve(nitems)
會更有效率 <random>
c ++ 03 std::rand
或c ++ 11 uniform_int_distribution<>
<random>
而不是c rand
。 ()
對於沒有參數的lambda是不必要的,盡管有些人更喜歡它們 az
形成一個連續的塊; 例如, 在EBCDIC中, i
和j
不相鄰 。 我相信唯一可移植的形式是在你的程序中存儲一個字符串"abcd...xyz"
並將其編入索引: 如何在C中編寫從a到z和A到Z的單個for循環?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.