• ベストアンサー

new演算子でメモリを確保したが、値が格納されなかった配列の…

new演算子でメモリを確保したが、 値が格納されなかった配列の判別方法は ありますでしょうか? int i; int* a; a = new int[5]; a[0] = 0; a[1] = 1; a[5] = 5; //0,1,5のみ表示させたい for (i = 0; i < 6; i++) { if (?????) cout << a[i] << endl; }

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

多少重くなることが許容できるなら、mapを使えば簡単です。 std::map<int, int> a; a[0] = 0; a[1] = 1; a[5] = 5; for (std::map<int, int>::const_iterator iter(a.begin()), last(a.end());   iter != last;   ++iter) {  std::cout << iter->second << std::endl; }

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • f_attck
  • ベストアンサー率33% (40/118)
回答No.4

今まで回答があったもの以外で。 配列を配列に代入する値の想定外値で初期化しておき その値以外であれば表示する。 質問には a[0] = 0; とありますので、0は使うみたいですね。 0xFFFFFFFFで初期化というのはどうでしょうか?

すると、全ての回答が全文表示されます。
回答No.3

構造体でのフラグを用いて判定すると簡単です。 ---------------------------------------------------------------- #include <iostream> using namespace std; struct Int {  int value;  bool flag; // 管理用フラグ  // コンストラクタ  Int()  {   flag = false;  }  // 代入処理  int operator = (const int val)  {   flag = true;   return (value = val);  } }; void main() {  int i;  Int* a;  a = new Int[6];  a[0] = 0;  a[1] = 1;  a[5] = 5;  //0,1,5のみ表示させたい  for (i = 0; i < 6; i++)  {   // flag が true なら代入されたので表示する   if (a[i].flag)   {    cout << a[i].value << endl;   }  } } ---------------------------------------------------------------- この方法だと、余分なメモリを使うことになりますが、 スマートに代入することができるので使い易いと思います。

すると、全ての回答が全文表示されます。
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

>new演算子でメモリを確保したが、 >値が格納されなかった配列の判別方法は >ありますでしょうか? ありません。 あらかじめ使わない値に初期化しておくか、構造体にして、フラグで管理してください。

すると、全ての回答が全文表示されます。