在我的任务:)尽可能多地使用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));
Run Code Online (Sandbox Code Playgroud)
我试过了
std::generate_n(std::back_inserter(mrbig),nitems,[](){return 'a'+(rand()%26);});
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但我想确保我没有弄乱一些东西.
eca*_*mur 11
generate_n要求它的第一个参数满足OutputIterator,哪个back_insert_iterator(它iterator_category是output_iterator_tag).
您的代码可能存在的问题:
std::generate_n(std::back_inserter(mrbig),nitems,[](){return 'a'+(rand()%26);});
Run Code Online (Sandbox Code Playgroud)
mrbig.reserve(nitems)会更有效率std::rand或C++ 11 uniform_int_distribution<>的<random>,而不是Ç rand.()lambda捕获和lambda体之间的括号对于没有参数的lambda是不必要的,尽管有些人更喜欢它们a-z形成一个连续的块; 例如,在EBCDIC,i并且j是不相邻的.我相信唯一可移植的形式是"abcd...xyz"在程序中存储一个字符串并将其编入索引:如何在C中编写从a到z和A到Z的单个for循环?