unique_ptr< T[] >をforeach文で使用する方法をご教授お願いします。


私は今、unique_ptrを用いてメモリ管理を行っています。  
その際、unique_ptrで配列を動的確保し、それをforeach文で回す方法があるかどうか知りたいです。

具体的には、

[code]

    unique_ptr < int[] > foo = make_unique< int[] >(20);
    for(auto& a : foo){
        a = 0;
    }
    
[/code]

のような感じです。  
unique_ptrにはイテレータが用意されていないので、私の知識ではこのような処理を記述することができませんが、配列の要素数を気にせず使えるので、出来ればforeach文で処理したいと考えています。  
C++はまだ１年も触ってない初心者ですので、解りにくい表現や、間違えて認識している部分を多々あるとは思いますが、どなたかご教授願います。




> unique_ptrで配列を動的確保し、それをforeach文で回す方法があるかどうか知りたいです。

ありません。

（ちなみに、C++には"foreach文"は存在しないので、range-based
for構文か[`std::for_each`アルゴリズム](http://cpprefjp.github.io/reference/algorithm/for_each.html)ですね。）

スマートポインタ`unique_ptr<T[]>`には配列要素数を管理する機構がないため、別変数を使って要素数を管理しなければなりません。また、要素走査には古典的forループが必要です。

[code]

    size_t num = 20;
    unique_ptr<int[]> foo = make_unique<int[]>(num);
    for(size_t i = 0; i < num; ++i){
        auto& a = foo[i];
        a = 0;
    }
    
[/code]

なので、通常は可変長配列`vector<T>`の利用をお勧めします。

* * *

おまけ：C++ランタイムライブラリは、配列の解放処理`delete[]`を正しく行うために、[その要素数を知っています](https://isocpp.org/wiki/faq/freestore-
mgmt#num-elems-in-new-array)。ただし、プログラムからこの情報にアクセスする方法は存在しません。




> unique_ptrで配列を動的確保し、それをforeach文で回す方法があるかどうか知りたいです。

ありません。

（ちなみに、C++には"foreach文"は存在しないので、range-based
for構文か[`std::for_each`アルゴリズム](http://cpprefjp.github.io/reference/algorithm/for_each.html)ですね。）

スマートポインタ`unique_ptr<T[]>`には配列要素数を管理する機構がないため、別変数を使って要素数を管理しなければなりません。また、要素走査には古典的forループが必要です。

[code]

    size_t num = 20;
    unique_ptr<int[]> foo = make_unique<int[]>(num);
    for(size_t i = 0; i < num; ++i){
        auto& a = foo[i];
        a = 0;
    }
    
[/code]

なので、通常は可変長配列`vector<T>`の利用をお勧めします。

* * *

おまけ：C++ランタイムライブラリは、配列の解放処理`delete[]`を正しく行うために、[その要素数を知っています](https://isocpp.org/wiki/faq/freestore-
mgmt#num-elems-in-new-array)。ただし、プログラムからこの情報にアクセスする方法は存在しません。

