• 締切済み

メンバ変数に関して

現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

みんなの回答

  • Schwarz20
  • ベストアンサー率46% (6/13)
回答No.3

> メンバ変数の配列数の可変可を実施することは可能でしょうか? 可能です。 ANo2.が応えている通り、STL(Standard template library)が使える環境であれば、vectorテンプレートクラス等のコンテナを使用するのがよいと思います。 STLでは、配列<vector>だけでなく、リスト<list>、連想配列<map>、待ち行列<queue>、スタック<stack>などの構造を使用することが出来ます。 参考URLにSTLのコンテナの特徴一覧がありますので、参考にしてください STLが使用できなければ、ANo1.のように、new[]/delete[]演算子やmalloc/calloc/realloc/freeのメモリー制御関数を使用することになります。そのときは、メモリーの解放や、コピーコンストラクタの動作に気をつけてください。 特に、デストラクタでdelete[]やfreeがあるとインスタンスをコピーしたとき問題が発生しやすくなります

参考URL:
http://ufcpp.net/study/stl/characteristics.html
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

自分でnew[]するより、std::vectorを使えばdelete[]も気にする必要がないです。

  • koedame
  • ベストアンサー率33% (10/30)
回答No.1

可能ですけど、メンバ変数として使いまわす場合、その配列内の 値の保持を優先する場合面倒ですが・・・。(ソースが読みにくくなる場合もしばしば) 知っていたなら無用のおせっかいですが、 簡単にやるなら new 演算子を使うと便利です。 int *p;//int 型のポインター p = new int[ 10 ]; これだけで p は10のint型配列になります。 new 演算子は本来アドレスを指すだけのポインターに 領域を確保させ、そのポインター自体に値を格納することが できます。 ただし、プログラムの最後までには必ず delete 演算子で確保した領域の開放をしなければなりません。 delete [] p; 他にも malloc() という関数があるのですが、それはご自分で調べてみてください。 様々なサイトで紹介されています。(new & delete についてもサイトで調べたほうが詳しく掲載されているのでそっちを見てみたほうがいいですよ。) >プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 については 例: main() {   int a;   int *p;   scanf( "%d", &a );   p = new int[ a ];//領域確保   for( int i=0; i<a; i++ )   {     p[ i ] = i;     printf( "%d",p[ i ] );   }   delete [] p;//領域開放   return 0; }