有没有一种快速的方法来执行以下操作而无需重复i++
int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);
我需要用 8 对或更多对来执行此操作,并且代码看起来很糟糕..
参数的评估顺序未指定。此外,您不能在没有中间序列点的情况下两次修改变量。所以改为这样做:
printf("foo-%d,blah-%d,orange-%d", i, i+1, i+2);
i+=3;
由于您可以拥有 8 对或更多对,我建议您使用更易读且易于扩展的版本:
std::vector<std::string> vec_values = {"foo", "blah", "orange"};
for (size_t index = 0; index < vec_values.size(); ++index)
std::cout << vec_values[index] << "-" << index;
您可能会根据前缀而不是数字来考虑它:
int i = 0;
std::vector<std::string> prefixes { "foo", "bar", "baz", "ham" };
bool first = false;
for (const auto& prefix : prefixes) {
if (!first)
std::cout << ',';
std::cout << prefix << '-' << i++;
first = false;
}
如果你不能使用 C++11 range-based for
,你可以完整地写出来:
for (auto prefix = prefixes.begin(); prefix != prefixes.end(); ++prefix) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << *prefix << '-' << i++;
// ~~~~~~~
first = false;
}
或者,使用索引:
for (i = 0; i < prefixes.size(); ++i) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << prefixes[i] << '-' << i;
// ~~~~~~~~~~~ ~
first = false;
}