C++を勉強中でstd::arrayを実装しているところです。
2つ分からない点があります。
C++
1template < typename Array > 2struct array_iterator 3{ 4 Array & a ; 5 std::size_t i; 6 array_iterator( Array & a , std::size_t i ) 7 : a( a ) ,i(i){ } 8 9 10 typename Array::reference operator *() 11 { 12 return a[i] ; 13 } 14 15 16} ; 17 18template<typename T,std::size_t N> 19struct array 20{ 21 using value_type = T; 22 using reference = T&; 23 using size_type = std::size_t; 24 using const_reference = T const &; 25 using iterator = array_iterator<array>; 26 27 value_type storage[N]; 28 29 reference operator[](std::size_t i) 30 { 31 return storage[i]; 32 } 33 34 const_reference operator[] (std::size_t i) const 35 { 36 return storage[N]; 37 } 38 size_type size() 39 { 40 return N; 41 } 42 43 reference front() 44 { 45 return storage[0] ; 46 } 47 const_reference front() const 48 { 49 return storage[0] ; 50 } 51 52 reference back() 53 { 54 return storage[N-1] ; 55 } 56 const_reference back() const 57 { 58 return storage[N-1] ; 59 } 60 61 iterator begin() 62 { 63 return iterator(*this,0); 64 } 65 66 iterator end() 67 { 68 return iterator(*this,N); 69 } 70 71 void fill(T const &u) 72 { 73 74 } 75 76};
1つ目
クラスarray_iteratorのところの Array & a; 部分についてです。
&がついているのでreferenceを宣言しているのでしょうか?
referenceは宣言時に初期化しないといけないというのは、
クラス内では無効になるのでしょうか?
2つ目
クラスarrayのbegin、back関数の戻り値iterator(*this,N)についてです。
これはクラスarray_iteratorのコンストラクタに代入した値になるのは理解しています。
しかし、*thisがaに代入されるのが違和感があります。
*thisは呼び出したクラスのオブジェクトを示すのは理解できたのですが、どのような情報を渡しているのでしょうか?
意味がわからなかったらすいません。
回答1件
あなたの回答
tips
プレビュー