在我尽可能使用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);});
它似乎工作正常,但我想确信自己没有弄错什么。
mrbig.reserve(nitems);
以避免重新分配内存空间。 - Kerrek SBstd::rand
添加限定符。虽然这可能仍可行,但实际上不应该这样做,至少如果您没有包含C++中不应该使用的stdlib.h
。 - Christian Rauusing
,但请不要自动添加)。我仍然更喜欢非弃用功能而不是弃用功能,也更喜欢C++而不是C/C++,但这可能又是主观的(并且像我说的那样,弃用并不意味着太多)。所以你得到了你的观点。 - Christian Rau<stdlib.h>
是C语言头文件,也是C++标准的一部分,但是在C++中更推荐使用<cstdlib>
,因为它将<stdlib.h>
中的名称放置在std
命名空间中。所有的C头文件<foo.h>
都有一个对应的C++包装器<cfoo>
。 - boycy