2011-01-20 28 views
0

プログラムをOOPに変換しようとしています。プログラムは、いくつかの配列で動作します:コンストラクタの配列初期化

int *tipoBilletes; 
int *cantBilletes; 

と私はそれが動作

tipoBilletes = new int[9]; 
cantBilletes = new int[9]; 

tipoBilletes[0] = 500; 
tipoBilletes[1] = 300; 
tipoBilletes[2] = 200; 
... 

を書いたコンストラクタで:

int tipoBilletes[9] = { 500,300,200,100,50,20,10,1,2 }; 
int cantBilletes[9] = {0}; 

だから私の変換のために、私は、ヘッダーファイルでこれを宣言しました良い。

私の質問は、Javaのように初期化する方法はありますか?

int[] tipoBilletes = new int[]{ 500,300 }; 

各要素を1つずつ設定する必要はありませんか?

+2

新しいバージョンのC++が出てくるまではない。しかし、 'new []'ではなく 'std :: vector'を使うべきです。また、固定サイズの配列から動的な配列に変更することで得られるメリットは何ですか? – GManNickG

+0

I * still *は、古いC++でデフォルトのコンストラクタを持たないオブジェクトのプレーンなローカル配列と同じように単純なことをどうして実現できないのかを理解できません... C++ 03を作るとき、または何? – Kos

+0

よく私は動的配列を使用していましたが、私はjavaのような初期化を行うことができると思っていました –

答えて

4

いいえ、それぞれの割り当てを個別に書き留めておく必要はありません。別のオプションは、次のようになります。

const int TIPO_BILLETES_COUNT = 9; 
const int initialData[TIPO_BILLETES_COUNT] = { 500,200,300,100,50,20,10,1,2 }; 
std::copy(initialData, initialData + TIPO_BILLETES_COUNT, tipoBilletes); 

は(あなたはほぼ確実に代わりマニュアル動的割り当てのこのため std::vectorを使用する必要があることに注意してくださいあなたは resize Dそれをしたらけれども初期化が std::vectorと違いはありません。)。

あなたはSTDを使用している場合
+0

実際には 'std :: vector'オプションのために、' std :: copy'の代わりに一対のイテレータをとるコンストラクタを使ってベクトルを初期化することができます。 –

+0

@Fred:そうですね、それもできます! –

2

::ベクトルあなたがboost::assignを使用することができます。

#include <vector> 
#include <boost/assign/std/vector.hpp> 
//... 
using namespace boost::assign; 
std::vector<int> tipoBilletes; 
tipoBilletes += 500, 300, 200, 100, 50, 20, 10, 1, 2; 

を一方、あなたはそれが小さく、一定のサイズであれば、固定サイズの配列を使用することを検討すべきです。

関連する問題