を繰り返さずに次のことを行う簡単な方法はありますかi++
int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);
8つ以上のペアでこれを行う必要があり、コードはひどいように見えます。
引数の評価順序は規定されていません。また、間にシーケンス ポイントがなければ、変数を 2 回変更することはできません。そのため、代わりに次のようにします。
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;
}