-1

を繰り返さずに次のことを行う簡単な方法はありますかi++

int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);

8つ以上のペアでこれを行う必要があり、コードはひどいように見えます。

4

3 に答える 3

4

引数の評価順序は規定されていません。また、間にシーケンス ポイントがなければ、変数を 2 回変更することはできません。そのため、代わりに次のようにします。

printf("foo-%d,blah-%d,orange-%d", i, i+1, i+2);
i+=3;
于 2012-09-26T16:42:28.440 に答える
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;
于 2012-09-26T16:53:51.710 に答える
1

番号ではなく、プレフィックスの観点から考えることができます。

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;
}
于 2012-09-26T16:50:26.850 に答える