>をforeach文で使用する方法をご教授お願いします。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。>をforeach文で使用する方法をご教授お願いします。2,054件30私は今、unique_ptrを用いてメモリ管理を行っています。その際、unique_ptrで配列を動的確保し、それをforeach文で回す方法があるかどうか知りたいです。0;}のような感じです。unique_ptrにはイテレータが用意されていないので、私の知識ではこのような処理を記述することができませんが、配列の要素数を気にせず使えるので、出来ればforeach文で処理したいと考えています。C++はまだ1年も触ってない初心者ですので、解りにくい表現や、間違えて認識している部分を多々あるとは思いますが、どなたかご教授願います。票4unique_ptrで配列を動的確保し、それをforeach文で回す方法があるかどうか知りたいです。for構文かstd::for_eachアルゴリズムですね。)スマートポインタunique_ptr<T[]>には配列要素数を管理する機構がないため、別変数を使って要素数を管理しなければなりません。要素走査には古典的forループが必要です。0;}なので、通常は可変長配列vector<T>の利用をお勧めします。おまけ:C++ランタイムライブラリは、配列の解放処理delete[]を正しく行うために、その要素数を知っています。プログラムからこの情報にアクセスする方法は存在しません。|3yohjpさんの述べているとおりunique_ptrでは要素数を知る方法がないため、別途要素数を自分で保存しておくことで実現することになります。要素数が分かれば、ラッパークラスを作ることで対応可能です。以下のコードでは、そのようなラッパーとしてクラステンプレートboost::iterator_rangeおよびそれを作成するヘルパ関数boost::make_iterator_rangeを使っています。}}Boostライブラリを使えなかったり使いたくなかったりする場合には、自作することになります。メンバ関数beginおよびendが存在するだけでよいので、比較的作成は容易だと思います。|2他の方も言っているように、使用するクラスを変えるか、ラッパーを作成する。どのように作るか知りたい場合の為、C++標準でどのように書けるか、最低限のサンプルのつもりで置いておく。std::cin.get();}※コード書き直した。前の状態だと、破棄する場面で正しく破棄できない(配列版unique_ptrが使用されない)のに、make_unique_wrapperで指定できるのは配列作成のみだったのでちぐはぐな状態だった。書き直した現状でも、想定通りのmake_unique_wrapperやmake_unique_wrapper以外の書き方への正しいエラー化を行ってはおらず、あくまで知識のたたき台として用意。大事なのは、最低限あれだけのインターフェース(iteratorのoperatorとunique_wrapperのbeginとend)を作りさえすればrange-based-forに投げ込めるという部分である。|1unique_ptrでなくvectorを使いましょう。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。