2012-03-04 10 views
0

私は単純なベクトルの入力と出力の操作で立ち往生しています。ここでベクトル<int>入力と出力

「のstd ::範囲outof」と言って、コンパイラが返すエラーは、私は、問題の内部の仕組みを簡単に説明をお願い申し上げコード

int main() 
{ 
int size; 
cout <<"Enter size of vector\n"; 
cin>>size; 
cout<<"Now to input the vector of size "<<size<<endl; 
vector <int> trial; 
for (size_t i=0;i<size;++i){ 
    int x; 
    cout<<"write at position"<<trial.at(i)<<'t'; 
    cin>>x; 
    trial.push_back(x); 
    cout<<endl; 
} 
ostream_iterator<int> output(cout,""); 
copy(trial.begin(),trial.end(),output); 
} 

です。

答えて

2

このループの最初の繰り返し考えてみましょう:第1の反復では何も

vector <int> trial; 
for (size_t i=0;i<size;++i){ 
    int x; 
    cout<<"write at position"<<trial.at(i)<<'t'; 

は、ベクターの中に押し込まれているので、trial.at(0)はまだ有効ではありません。結果は例外になります。どこでもtry/catchがないので、プログラムの実行が終了します。

あなたの代わりにcout << "write at position " << i;が必要なように見えます。 iはその位置です。それがベクトル上にプッシュされた後で有効な場合、vector.at(i)はその位置の値になります。

5

あなたはまだ、既存の要素にアクセスし、trial.push_back(x)trial.at(i)を呼び出します。要素が(まだ)存在しないため、iは無効なインデックスであり、無効なインデックスが渡されたときにat()std::out_of_range例外をスローします。例外が捕捉されない場合、プログラムは終了します。おそらくあなたのプラットフォームのランタイムライブラリは、プログラムの終了を引き起こした例外を表示します。

私はあなたが実際にしたいことはこれですとします

std::cout << "write at position " << i << '\t'; 
0
trial.at(i) 

あなたは存在しない要素にアクセスしています。

とにかくcout<<"write at position"<< i <<'t';が必要です。

+0

私は単にベクターに書き込もうとしていますが、最初に位置[0]で初期化してからcinを使って埋めてください。 –

+1

@AlterEgoなぜあなたはまだそれを挿入していないときにベクトルのi番目の要素を読み取ろうとしていますか? –

+0

@AlterEgoは単に 'cin >> x;要素にアクセスする前に trial.push_back(x); –

0

問題は、この行です:

cout<<"write at position"<<trial.at(i)<<'t'; 

あなたはベクトルの大きさを設定している前に、あなたがこれを呼び出します。とにかくそのラインが何を達成しようとしているのか本当に分かりません。あなたがそれをしないメモリ内の位置(アドレス)を印刷しようとしているなら、既に存在していたものを印刷しようとしているなら、すでに割り当てられていればうまくいくでしょう。 vector::push_back()を使用すると、事前に割り当てる必要はありません。

あなたはvectorのサイズを変更すると、このように直接の要素にアクセスすることによりこの問題を解決することができます

trial.resize(size); 
// loop 
// vector.push_back(x) -- now becomes 
vector[i] = x; 

それとも、あなたは、単に位置の印刷を削除し、あなたが今しているようpush_back()を使用することができます。

あなたが私がpush_back()resize()方法はどのように異なるかを把握しようとすることをお勧めvectorを使用する方法を調査している、ともvector::reserve()機能を見ているようですので。

+0

偉大な答え。ありがとう –

関連する問題