这是可能做到这一点只使用一个标准的算法,并与generate_n
拉姆达,但它仍然不能初始化它需要做一个const string
一个单独的行:
string foo;
const auto bar = 13U;
generate_n(back_inserter(foo), bar * 3U, [](){
static const char multiplicand[] = "0, ";
static const auto length = strlen(multiplicand);
static auto i = 0U;
return multiplicand[i++ % length];});
我创建了一个活生生的例子在这里:http://ideone.com/uIt2Ee但由于很可能已经取得平原所有问题的评论,这样我的要求一行代码会导致代码较差。马上,我们可以看到裸的常量3
表示multiplicand
的大小,并且不必要地更改初始化multiplicand
以更新此文字。
应当取得了明显的改进是:
string foo;
const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
generate_n(back_inserter(foo), bar * length, [&](){
static auto i = 0U;
return multiplicand[i++ % length];
});
下一个改进是消除了重新分配为foo
增长,这可能是昂贵的,如果bar
或length
大。这可通过构建foo
具有足够的空间来容纳整个生成的字符串来完成:
const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
string foo(bar * length, '\0');
generate_n(foo.begin(), bar * length, [&](){
static auto i = 0U;
return multiplicand[i++ % length];
});
[Live Example]
简短的回答是:不。 –
“标准算法和lambda” - 这不是一个辅助函数吗?请澄清。你想在这里做什么? –
@KarolyHorvath我认为这些部分一起“做这个没有我自己的帮助功能” - “如果我不能做到这一点,我敢肯定,这可以用标准算法和lambda回答” –