5

次のように、動的に割り当てられた配列に一意のポインターがあります。

const int quantity = 6;
unique_ptr<int[]> numbers(new int[quantity]);

これは今のところ正しいはずです ([]テンプレート パラメータの が重要だと思いますよね?)。ところで、int some_array[quantity] = {};ここのように要素を初期化することは可能ですか?

今、私は次のように配列を反復しようとしていました:

for (auto it = begin(numbers); it != end(numbers); ++it)
    cout << *it << endl;

しかし、構文がどのように正しいのかわかりません。方法はありますか?または、次のようなインデックスを使用できます。

for (int i = 0; i < quantity; ++i)
    cout << numbers[i] << endl; 

これらのいずれかが優先されますか?

(タイトルとは直接関係ありません。次のステップとして、それを範囲ベースの for ループに減らしたいのですが、現在 VS2010 を持っているだけでそれを試すことはできません。しかし、私が世話をしなければならないことはありますか?)

ありがとうございました!ゲリット

4

2 に答える 2

3

C++ で動的に割り当てられた配列 (つまり、 の結果new []) にはサイズ情報がありません。したがって、配列のサイズを取得できません。

std::begin次のように実装できます。

namespace std
{
  template<typename T> T* begin(const std::unique_ptr<T[]> ptr) {return ptr.get();}
}

しかし、実装する方法はありませんend

の使用を検討しましたstd::vectorか? unique_ptr移動がサポートされているため、配列への移動よりもコストがかかることはありません。

于 2013-04-14T00:48:03.803 に答える