2017-12-24 40 views
2

これはちょっと愚かな質問かもしれませんが、私はそれ以外の場所では何の答えも見つけられませんでした。変数を初期化してstd :: cinで代入するC++

int N; 
cin >> N; 

私の質問は、コマンドの1行としてそれを書くためのエレガントな方法があるかどうかである:私は(少なくとも11は私が思う)と使用する必要があり、C++でコードを書いていますか? Iすでに私はちょうど改行を削除し、ちょうど1行にそれらを置くことができることを知っているが、それは私がonelinerループ内でそれを使用することはできないだろう:

for(int i=0; i<10; i++) myVector.push_back(); 
+0

関数を書くのか? – Galik

+4

しかしそれは私がonelinerループでそれを使用させませんでした_そう、しないでください?このような魅力的なワン・ループ・ループは何ですか?ループ本体の周りに括弧を入れて、必要な数だけステートメントを置くことができます。 –

答えて

5

以外の機能を書いてから、あなたが初期化を置くことができますし、 forループのヘッダに読み取る:

for (int i = 0, n ; i != 5 && cin >> n ; i++) 
    x.push_back(n); 

これはまた、値が正しく読み取られたことを確認するために、cin >> nの戻り値をチェックすることの問題に対処します。

Demo.

0

私はあなたのアプローチは「最高」1、あなたはベクトルに(それは非常に高価です)位置を押し戻すていて、すでにベクトルが持つ位置を知っているとは思いません。あなたは、なぜあなただ​​けのカッコを開かないpush_back()を使用して内部のコードを書きたいことができないのであれば、

myVector.resize(10); 
for (int i = 0; i < 10; i++) cin >> myVector [i]; 

をしかし: なぜあなたはちょうどこれをしませんか?何が問題なの?

+0

おそらく、ループに入ると要素myVector [i]が存在しないため、OPはそれをしません。 – dasblinkenlight

+0

要素が存在しない場合は、iをループする必要があるかどうかはわかりません。位置がわかっていることを意味します。しかし、あなたのアプローチも正しいですし、私はそれが好きです。そしてはい、キーは括弧を意味します、申し訳ありません。 – Marc43

+0

ベクターインデックスタイプは 'size_t'で、' int'は警告を受け取ります –

4

アルゴリズムとイテレータを使用して他の代替は:

std::copy_n(std::istream_iterator<int>{std::cin} 
      ,10 
      ,std::back_insert_iterator<std::vector<int>>{myVector});