VC++でオブジェクトのコレクション格納

このQ&Aのポイント
  • VC++言語を使ってオブジェクトのコレクションを格納する方法について教えてください。
  • VC++でのコレクションにオブジェクトを格納する手順について教えてください。
  • VC++でのオブジェクトのコレクション格納について詳しく教えてください。
回答を見る
  • ベストアンサー

VC++でオブジェクトのコレクション格納

すみません。 教えてください。 VC++言語を勉強しているのですが、不明点があるため教えていただきたいのです。 <VBサンプル> Set Col = new Collection For i = 1 To nMaxCount Set objIF = New iniFile 'iniファイル設定クラス With objIF .iniDirPath = mstriniDirPath .iniFileName = mstriniFileName nResult = .iniStart 'クラスの実行関数 If nResult < 0 Then iniReadRecStack = nResult Exit For End If ' コレクションにiniファイルクラスオブジェクトを格納する。 col.Add objIF, CStr(Count) Next 上記のようなことをVC++でやりたいのですが、可能でしょうか。 もしよければ、コレクションに格納する方法を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

できます。VC++ではこの手の操作は自分で実装することが多いと思います。 いくつか方法があります。単純にポインタを使って配列を管理する方法やMFCなどに用意されているクラスを利用する方法です。VBと同じように(VBでも使えるように)これらをCOMとして作ることもあります。 このように実装方法はいろいろありますが、例えば以下のような感じです。 class CInfo { オブジェクト定義 }; CArray<CInfo*> acInfo; CInfo* pInfo for(i = 0; i < 10; i++) {  pInfo = new CInfo;  pInfo->Load();  acInfo.Add(pInfo); } for(i = 0; i < 10; i++)  delete acInfo[i];

関連するQ&A

  • VBSでのコレクション

    教えてください。 VBのコレクション配列はVBSにはあるのでしょうか? クラスオブジェクトをコレクション配列に入れたいのですが.... 例: Class myclass : : End Class Sub Main() dim col as Collection dim mycl mycl = new myclass col = new myClass for i =0 to max myclass.xxx = xxxx col.add i mycl next End Sub 以上簡単ですが、myclをコレクション配列に格納したいのですが、

  • VB COLLECTIONについて

    VB collectionで  dim col1 as collection と定義した時  ウォッチで見た時    col1 |--- Item1 | |--- Fild1  値 | |--- Fild2  値 | |--- Fild3  値 |--- Item2 このFild1~Field3の名前をセットするにはどうしたらいいの でしょうか? クラスで名前を一つずつ設定すれば出来るのですが、 それを動的に行いたいのです。 配列 AA(2)に AA(0)="Name",AA(1)="Address1",AA(2)="Address2"  col1.add aa, "1" とやってみても(0)(1)(2)となってしまいます。 もし動的にセット出来れば、テーブルの列名を取得して その都度セット出来るようにしたいのですが。

  • Collectionによる多次元配列

    VBAでCollectionを二つ使用し、 値が入ったCollectionをもう片方のCollectionに入れて2次元配列のようにしたいのですが、 やり方がいまいちわかりません。 確か昔にそういった使い方をした記憶があるのですが、 ネットで調べてもみかけないので困っています。 Dim colA As Collection Dim colB As Collection Set colA = New Collection Set colB = New Collection colB.Add ("A") colB.Add ("B") colB.Add ("C") ※ colA.Item(1) = colB. Set colA = Nothing Set colB = Nothing 上記の※の箇所をどうすれば入れられるのでしょうか。 宜しくお願い致します。

  • 配列 シャッフルの高速化をするには?

    お世話になります。 私は今10万個の数字を配列に格納し シャッフルしていく問題を抱えております。 下記のプログラムだと 時間がかかりすぎて実用にたえません。 速くするにはどうすればよろしいでしょうか? Dim colBefore As Collection Dim colAfter As Collection Dim i As Long Set colBefore = New Collection Set colAfter = New Collection For i = 1 To 13 colBefore.Add CStr(i) Next Do Until colBefore.Count = 0 i = Int(Rnd(1) * (colBefore.Count - 1)) + 1 colAfter.Add colBefore.Item(i) colBefore.Remove i Loop For i = 1 To 13 Debug.Print colAfter.Item(i) Next

  • マクロの改ページの追加について。

    下記コードに、E列を上から見て値が変わったら改ページ、を追加したいのですが、上手くできません。 A列、D列のみの下記コードでは成功します。 ちなみにE列は日付なんですが、A列D列同様にコードを書き足すだけではダメなんでしょうか?? 以前こちらで質問させて頂いて、回答を頂いたコードで、私自身完璧に内容を理解できていないので、追加の仕方もわからない状況です。 よろしくお願い致します。 Sub test() Dim rng As Range Dim objA As New Collection Dim objD As New Collection Dim strA As String Dim strD As String Dim blnBreak As Boolean ' 改ページを全て解除 Activesheet.ResetAllPageBreaks Activesheet.PageSetup.PrintArea ="$A:$K" For Each rng In Range("A:A") strA = CStr(rng.Value) strD = CStr(rng.Offset(0, 3).Value) ' コレクションに追加(同じデータはスキップする) On Error Resume Next objA.Add strA, strA objD.Add strD, strD On Error GoTo 0 If objA.Count = 2 Then ' A列の 2つ目のコレクションで改ページ blnBreak = True ' コレクションをリセット Set objA = New Collection Set objD = New Collection objA.Add strA, strA objD.Add strD, strD Else If objD.Count = 4 Then ' D列の 4つ目のコレクションで改ページ blnBreak = True ' コレクションをリセット Set objA = New Collection Set objD = New Collection objA.Add strA, strA objD.Add strD, strD Else blnBreak = False End If End If ' 改ページ挿入 If blnBreak Then Activesheet.HPageBreaks.Add rng End If Next End Sub

  • Collectionからの型変換について

    いつもお世話になっています。 Collectionについてなのですが、 Collection→配列は、可能ですが、 Collection→List,Mapはできないのでしょうか? ためしに、CollectionにList,Mapそれぞれを格納してみると Object[]で、List,Mapそれぞれの値を取得することはできるようなのですが。 以下が実行時のソースです。 //MapからCollection Map map = new HashMap(); map.put("tet","ttt"); map.put("a", "arigato~"); //MapをCollectionに格納する Collection co1 = java.util.Arrays.asList(map); //Object型配列で取得する Object[] ob1 = co1.toArray(); System.out.println(ob1.length + "/" + ob1[0]); //ListからCollection List list = new ArrayList(); list.add("test"); list.add("arigato~"); //ListをCollectionに格納する Collection co2 = java.util.Arrays.asList(list); //Object[]で取得する Object[] ob2 = co2.toArray(); System.out.println(ob2.length + "/ " + ob2[0]); 表示結果: 1/{a=arigato~, tet=ttt} 1/ {a=arigato~, tet=ttt} 宜しくお願いします。

    • ベストアンサー
    • Java
  • Listに格納されたオブジェクトの属性毎に集計

    【1】 生徒(Student)クラスを生成し、住所(address)などを設定 【2】 1を、List型オブジェクトに格納。 【3】 2のListの中の生徒(Student)オブジェクトから、住所毎に集計する 3のやり方を教えて下さい。 例えば、以下のような感じです。 --------------------------------------------------- //【1】 Studentオブジェクトを大量に生成し、それぞれに住所などを設定 Student smith = new Student(); smith.setAddress("hongkong"); Student ken = new Student(); ken.setAddress("tokyo"); Student scott = new Student(); scott.setAddress("scottland"); (以下、同様)  ・  ・  ・ //【2】 生成した全てのStudentオブジェクトをListに格納していく。 List studentList = new ArrayList(); studentList.add(smith); studentList.add(ken); studentList.add(scott); (以下、同様)  ・  ・  ・ //【3】 ListオブジェクトからStudentオブジェクトを取得し、 //同じ住所毎に、集計する //<例> //hongkong--- 4900人 //tokyo--- 3800人 //scottland--- 4600人 --------------------------------------------------- 1や2は、すでに出来上がっていて、変更できない為、 3のやり方のみ教えて下さい。 (Studentオブジェクトが格納されたListオブジェクトが、既に存在することが前提) また、Studentオブジェクトが大量にある為、 処理が重くなる実装の仕方は避けたいです・・。 もし分かる方いましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • リファレンスの機能

    リファレンスではサブルーチンとして呼び出すライブラリ自体を変数に格納することができるのでしょうか?その概念がよくわかりません。たとえば HOGE.plというプログラムがあり、 (1)use INILOAD; (2)$HOGE::INI = new INILOAD inifile=>'CONFIG.ini'; (3)($ret, $MESS, $s) = $HOGE::INI->load; このloadがどこのことなのか、を調べているうちにINILOAD.pmのなかにあることがわかったのです。 そこで(3)をとおった時点で$HOGE::INIの中身をlogで確認したら INILOAD=HASH(0x1857b04) が格納されていました。これってINILOAD.pmそのものを格納しているということでしょうか?だとすると上記文でなぜ$HOGE::INIのなかに ライブラリ名が格納されるのですか? 最後にINILOAD.pmのnewを記載します。 sub new { my($class) = shift; my($args) = {@_}; &init(); bless { INIFILE => $args->{inifile} || 'default.ini', }, $class; } sub init { my($self) = shift; $self->{STATUS} = 0; $self->{STATUS_MESS} = 'undefined'; undef $self->{DATA}; } おそらくbless以下の部分がキーになるのかとは思いますが、私の理解は 『ハッシュの引数の値をkey:inifile,値'default.ini'としてこのプログラム上で読めるようにし、それに$classを付加したものをINIFILE というグローバルな変数に代入する』 なのですが、どうもしっくりきません。ご指摘よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • iniファイルへの追記について

    FORM上の保存ボタンをクリックしたら、フォームに入力したデータがiniファイルへ追記していくというものを作りたいのですがわかりかねています。 フォームのソースで作っていこうとしていて、 ソースの始めは public sub Command保存_Click() で始まり、End sub で終りますよね? そこで フォーム上の値、例えば、3 を変数 a_col に格納します。ここまではできます。 この格納したものをiniファイルと同じものをあらわす名前のini_colに格納し、iniファイルに ini_col=3と表示したいのです。 iniファイルから、フォームへ取り込むところまではなんとかできました。 初心者ですのでアドバイスおねがいします。

  • For Each文内でのコレクションの変更について

    VB.Net/C# .NET Framework2.0で開発しております。 下記コード例のように、イテレータループ内(For Each文)でのコレクションの変更(要素の削除)ができないため、苦肉の策として下のように削除する予定のものを格納するバッファ(removeList)に一度登録し、その後もう一度ループをまわして実際に削除する、というコードを書いておりますが、分量も多くなり、一時変数なども出てくるため、あまりよいコードとは言えないと思います。 コレクションから特定の条件を満たした要素を削除するための、もうすこしスマートな書き方はないものでしょうか? 宜しくお願いいたします。 Dim removeList as new List(Of TestClass) For Each e as TestClass in targetList If e.IsDummy Then '直接targetList.Remove(o) とはできない removeList.Add(o) End If End For For Each e as TestClass in removeList targetList.Remove(e) End For

専門家に質問してみよう