2016-05-07 8 views
0

実行時にベクトルのベクトルのサイズを設定する方法を知りたいと思います。実行時のベクトルのベクトルのサイズを設定する

私はサイズを固定している場合は、私は通常

std::vector<std::vector<int>> ref(5); 

でそれを行うと、実行時にサイズを設定して興味を持っていた場合、私は今

ref[i].push_back(23); // i = 0,1,...4 

することにより、特定のベクトルの要素をプッシュします、手段、私はコマンドライン引数を介してサイズを取得し、上記と同じ方法で要素をプッシュしたい。

私は

std::vector<std::vector<int>> ref; 

オープン、それを維持することにより、ベクトルのベクトルを宣言することにより、それを行うと、その後

ref[i].push_back(23); 

を要素をプッシュすると思った。しかし、私が得るように私は、間違っていると確信していますエラー

セグメンテーション障害(コアダンプ)

+0

は、ベクトルのstd ::ベクトルを初期化して呼び出す<はstd ::ベクトル> refの{{}} – perencia

+0

があなたのサイズを設定することを何か特別なもののためですか? – perencia

+0

ちょっとしたコメントi = 1..5、ref [i]はsegfaultになります。インデックスはC++ではゼロから始まりますので、iの範囲は0..4でなければなりません。 –

答えて

2

あなたはstd::vector::resizeを使用することができます。ベクトルの内容を変更せずに入力サイズが現在のベクトルのサイズより大きい場合、ベクトルの容量を増やします。 (これは、ベクトルを再割り当てすることがあり、それはあなたのプログラムには影響しません)

あなたが行ったように、ベクトルを初期化します、
vector<vector<int> > ref;

さて、あなたはプッシュバック史上ときiは、現在のサイズ内にあるかどうかを確認しますベクター。ない場合は、std::vectorのサイズを変更してからstd::vector::push_back

if(i>=ref.size()) 
    ref.resize(i); 
ref[i].push_back(23); 
3

コマンドライン引数でサイズを取得し、上記と同じ方法で要素をプッシュします。

iを求める前に、最大サイズをユーザーに確認する:

cout << "What is the size of your vector? "; 
int size; 
cin >> size; 
std::vector<std::vector<int>> ref(size); 

今、あなたは、iを求めるsizeに対してそれらを確認し、クラッシュせずにref[i]を呼び出すことができます。

+0

'std :: vector > ref(size);が許されるのはなぜですか?なぜ動的に割り当てる必要はありませんか?あなたは私を適切な質問に説明したりリンクしたりできますか? – rimiro

0

あなたはそれをよく開いていて、初期化を忘れてしまいました。

std::vector<std::vector<int>> ref{{}} 

編集:あなたはrefは成長したい場合はもちろん、あなたもそれにベクトルをプッシュバックする必要があります。

std::vector<int> v1; 
ref.push_back(v1); 

その後、

ref[1][0]=23. 
+1

これは、 'std :: bad_alloc'のインスタンスをスローした後に呼び出される 'terminate'の後に、ベクトルref [0]の1つのみに対して動作します。 what():std :: bad_alloc'。 –

+0

私が提案した解決策は魔法ではありません。提案された質問の最後の部分としてサイズを設定せずにrefを増やすことができますが、もちろん必要なpush_backを追加する必要があります。 – perencia

関連する問題