• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:for each で扱えるコレクションの実装)

for eachで扱えるコレクションの実装

このQ&Aのポイント
  • CFooArrayというクラスを作成し、CFooDataクラスをdequeで持つように実装することでfor eachで扱えるコレクションを作ることができます。
  • dequeを外に出すことはできず、CFooArray内部にCFooDataクラスを持たせる必要があります。
  • 参考サイト: https://qiita.com/m195h/items/7b89425f72e5a2f2155a

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

なにがなんでも for each じゃなきゃダメですか? range-based for なら簡単に実装できますが。 #include <iostream> #include <deque> using namespace std; typedef int CFooData; class CFooArray { typedef std::deque<CFooData> container_type; public: typedef container_type::iterator iterator; void add(const CFooData& data) { data_.push_back(data); } // begin()とend()を定義すればrange-based for が使える。 iterator begin() { return data_.begin(); } iterator end() { return data_.end(); } private: container_type data_; }; int main() { CFooArray array; array.add(1); array.add(2); array.add(3); for ( CFooData item : array ) { cout << item << endl; } }

TeijigoTeatime
質問者

お礼

詳細な返答ありがとうございます。 なぜfor eachではなければならないかを確認したところC#でと構文が同じだからだそうです。 リストを拝見しました。 こういう実装の仕方があるのかと目から鱗です。 とても参考になります。 for ( CFooData item : array )でよいか確認してみます。

その他の回答 (3)

回答No.4

#3 補足 Visual C++ なら for ( CFooData item : array ) を for each ( CFooData item in array ) と書いてもいいみたい。 for each はあくまで Visual C++ の独自仕様だろうからオススメしません。

TeijigoTeatime
質問者

お礼

そうなのですか。 for ( CFooData item : array ) でダメなのか提案してみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

素の C++ (ISO/IEC 14882) にそんなものはないので C++/CLI (ECMA372) のことだと思っていい? もしそうなら, 「どうすればいいか」は EMCA372 の仕様に書いてあります.

TeijigoTeatime
質問者

お礼

早々のご返答ありがとうございます。 上記のepistemeさんより指摘されていますが、VisualC++の仕様のようです。 言語実装については全く知らないので機会があれば勉強してみたいと思います。

回答No.1

CFooArray arrayFoo ; とやった時に、arrayFooの実体が「配列」になっていれば for each( CFooData fooData in arrayFoo ) { } と書ける。 今はCFooArrayが「リスト構造を表せる、配列じゃないもの」だから、for eachが使えない。

TeijigoTeatime
質問者

お礼

早々のご返答ありがとうございます。 説明が不十分だったと思います。 私も理解できていないまま質問してしまいました。

関連するQ&A