プロが教える店舗&オフィスのセキュリティ対策術

 こんにちは。いつもお世話になっております。
 プログラミングの初心者で、現在VC++でプログラムを作成しています。環境は、OSがWindowsXP、統合環境はVisualStudio2008 Professionalを使用しています。
 プログラムの中で配列の代わりにListクラスを使いたいのですが、Listのインデックスを指定して値を代入することができません。MSDNではinsertメソッドでインデックスを指定して挿入ができるように書かれているのですが・・・・・。リストは整数を格納するためのもので、
List<int>^ zangakuList;
と、宣言してメソッドの中では、
zangakuList->Insert(i, item->Money);
のように使用しています。ちなみに、iの代わりに0を設定するとリストの先頭に値が代入されます。
 お手数ですが、原因がお分かりの方、よろしくご教授ください。m(_)m

A 回答 (2件)

リストの末尾に順に足すだけなら


zangakuList->Insert(i, item->Money);
ではなく
zangakuList->Add(item->Money);
を使いなさい。

Insertは、リストの先頭に挿入するとか、リストの途中に挿入するなど、末尾以外に挿入する場合のみに使う。

なお
for (i = 0; i < 20; i++)
{
   if(banknary[i] == item->Bankn)
  {
     zangakuList->Insert(i, item->Money);   (ここでエラーが発生)
 break;
   }
}
と言うプログラムは、iがzangakuList->Countより大きい状態でiの位置にInsertしようとするので、ほぼ間違い無く例外が発生する。

例えば、zangakuListが空でスタートし、iが0の時にbanknary[i] == item->Banknが成り立たない場合、Insertが実行されず、zangakuListが空のままになる。

次のループに入り、iが1の時にbanknary[i] == item->Banknが成り立つと、Insertを実行しようとするが、zangakuListが空なので、Insertが許されるのは0の位置のみである。

しかしzangakuList->Insert(i, item->Money);のiは1になっているので「Insertメソッドの第1引数『index』が範囲外である」と言うエラーとなる。

ListのInsertメソッドの第1引数Indexに許されるのは「0以上、Countメンバ以下」である。空のリストは「Countが0」であるので「0以上、0以下」つまり「0」しか許されない。

プログラムを以下のように修正せよ。
for (i = 0; i < 20; i++)
{
   if(banknary[i] == item->Bankn)
  {
     zangakuList->Add(item->Money);
     break;
   }
}
または
for (i = 0; i < 20; i++)
{
   if(banknary[i] == item->Bankn)
  {
     zangakuList->Insert(zangakuList->Count,item->Money);
     break;
   }
}

ぶっちゃけ
zangakuList->Insert(zangakuList->Count,item->Money);
は馬鹿臭い。zangakuList->Countを引数にしてInsertする必要はなく
zangakuList->Add(item->Money);
で充分である。
    • good
    • 0
この回答へのお礼

 chie65535さん、こんにちは。回答ありがとうございました。御礼が遅くなり申し訳ありません。
 教えて頂いた様に、ListオブジェクトにAddしていくやり方でうまくいきました。分かりやすい回答本当にありがとうございました。m(_)m

お礼日時:2009/01/29 22:18

どのようなコードをお書きになって期待する実行結果と実際の結果にどのような違いがあるのでしょう



全く何も登録されていない ListオブジェクトにInsertメソッドをつかって要素を追加しようとしているのでしょうか
何か例外(エラー)が発生しているのであればその内容も明示しましょう

この回答への補足

 こんにちは、redfox63さん。早速の回答ありがとうございました。m(_)m
 ご指摘の通り、何も登録されていないListオブジェクトにInsertメソッドを使って要素を追加しようとしています。また、プログラムの実行の際に、
「ArgumentOutOfRangeExceptionはハンドルされませんでした。インデックスは一覧の範囲内になければなりません。パラメータ名: index」というエラーが表示されます。実際のコードは以下のようなものです。

***** Listオブジェクトを作成 *****
zangakuList = gcnew List<int>(20);

***** 条件に合致した場合、Listオブジェクトに要素を追加 *****
for (i = 0; i < 20; i++)
{
   if(banknary[i] == item->Bankn)
  {
     zangakuList->Insert(i, item->Money);   (ここでエラーが発生)
 break;
   }
}

補足日時:2009/01/27 08:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!