![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちは。
プログラムの保守を請け負っているのですが、独自に実装されているリストクラスがありまして、
それをfor eachで操作できるようにとの指示がありました。
処理系はC++です。
CFooArrayというクラスだとしまして、内部にCFooDataというクラスをdequeで持っています。
要望としては
CFooArray arrayFoo ;
for each( CFooData fooData in arrayFoo )
{
}
とできるようにしてほしいとのことですが、そもそもfor eachで扱えるコレクションクラスを
どう実装していいのかが分かりません。またdequeを外に出すのはナシと言われました。
どなたかご存じの方がいらっしゃいましたら教えていただけないでしょうか。
参考サイトでも紹介していただければ幸いです。
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;
}
}
詳細な返答ありがとうございます。
なぜfor eachではなければならないかを確認したところC#でと構文が同じだからだそうです。
リストを拝見しました。
こういう実装の仕方があるのかと目から鱗です。
とても参考になります。
for ( CFooData item : array )でよいか確認してみます。
No.4
- 回答日時:
#3 補足
Visual C++ なら
for ( CFooData item : array ) を
for each ( CFooData item in array ) と書いてもいいみたい。
for each はあくまで Visual C++ の独自仕様だろうからオススメしません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- HTML・CSS VS.NETのコードを色合いも含めてHtmlに貼り付けたい。 1 2023/02/02 14:15
- Excel(エクセル) 開いているフォルダを全て閉じる、マクロを教えて下さい 3 2022/08/28 08:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログクラスのコントロー...
-
FriendとPublicの違い。。。
-
イベントにAddHandlerされてい...
-
継承を重ねた場合のコストはど...
-
IncludeではなくClassで宣言す...
-
MessageBoxを継承したい
-
privateなメンバ関数をテストす...
-
Delphi2007のCheckBox.Font.Col...
-
DLLからEXEのクラスを呼び出す...
-
VB2008: 継承の場合のコンスト...
-
派生クラスから基本クラスprote...
-
ウィンドウの背景に画像を配置する
-
自動生成コードを変更したい(VB...
-
親クラスのコンストラクタは? ...
-
【VC++】クラスの追加方法について
-
DataGridViewのセルに斜線を引...
-
このコンパイルエラーの意味に...
-
クラスオブジェクトの new の仕...
-
変数・関数その他の命名規則
-
ソケットを使った「非同期」通...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
クラスのアドレスを引数として...
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
ダイアログクラスのコントロー...
-
エディットコントロールでEnter...
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
イベントにAddHandlerされてい...
-
MFC モードレスDlgについて
-
MFCのCListCtrlでスクロールを検出
-
privateなメンバ関数をテストす...
-
[MFC] CWnd::MessageBoxの警告...
-
継承を重ねた場合のコストはど...
-
DataGridViewのセルに斜線を引...
-
ボタンのオーナードローについて
おすすめ情報