2

重複の可能性:
添え字を使用して、最後の1つの配列要素のアドレスを取得します:C ++標準で合法かどうか?

C ++標準ライブラリでは、多くのアルゴリズムが引数begin()としてend()イテレータを取ります。ただし、トリックは、end()イテレータがコンテナの終了後にあることです。標準のc配列にアルゴリズムを適用する場合は、と同等のポインターを渡す必要がbegin()あります。end()

質問は次のとおりです。

const unsigned int size = 10;
int array[size];
std::iota(&array[0], &array[size], 0); // <- Version 1
std::iota(&array[0], &array[0]+size, 0); // <- Version 2

2つのバージョンは厳密に同等ですか?C ++標準に従ってバージョン1を問題なく使用できますか?

&array[size]私の疑問は、配列の終わりの後に要素にアクセスしてからアドレスを取得するのに対し、配列の終わりの後に要素にアクセスしないという事実から来て&array[0]+sizeいます。

4

1 に答える 1

3

使用するだけで、心配する必要はstd::beginありません。正しいことを実行します。:)std::end<iterator>

于 2012-11-05T03:01:52.553 に答える