2017-09-26 12 views
-3

ベクトル 'r'が出力を次のように与えるのはなぜですか?その代わりに、リストにゼロが入るべきではありません。C++、ベクトル:0を含む不正な出力を取得する

誰かが助けることができますか?

出力:0 0 0 0 0 5 1 2 3 4

vector <int> leftRotation(vector <int> a, int d) { 
vector<int> r(a.size()); 

// int j=0; 
for(int i=d; i<a.size(); i++) 
    r.push_back(a[i]); 

for(int i=0; i<d; i++) 
    r.push_back(a[i]); 

return r; 
} 
+0

コアの問題は、推測に基づいてC++を書いていることです。それは動作しません。良い本から体系的にC++を学び、必要に応じてcppreference.comで情報を探しましょう。 –

+0

すでにstd :: rotateが存在します。 –

答えて

2

あなたはあなたのコードの開始時に0のa.size()のコピーとRを初期化されています。この時点で

vector<int> r(a.size()); 

は、ベクトルrは値が含まれています0 0 0 0 0(多くのゼロは、aにある要素と同じです)。

次に、ゼロのベクトルの後ろに値をプッシュします。

代わり
0 0 0 0 0 5 
0 0 0 0 0 5 1 
0 0 0 0 0 5 1 2 
0 0 0 0 0 5 1 2 3 
0 0 0 0 0 5 1 2 3 4 

、空のベクターで初期化します:あなたのループの各ステップでvector<int> r(a.size())のローカル変数は、ベクトルのコンストラクタ(size_type count)引数を受け入れ、初期化され、過負荷(というかゼロ化を使用しています

vector<int> r; 
1

アウト)にはa.size()の番号0が含まれます。詳細は、std::vectorコンストラクタのオーバーロード番号を参照してください。 3:

過負荷(3)

代わりに空のコンテナを作成するために、既定のコンストラクタを使用して、int型の非クラス型の要素うちゼロに:

std::vector<int> r; 

または:を

std::vector<int> r{}; 
0
vector<int> r(a.size()); 

この行では、初期サイズa.size()のベクトルを作成します。

0 0 0 0 0 

その後、あなたはpush_back()メソッドを呼び出します。ベクトル内の最初の要素は、おそらくあなたのaベクトルは大きさ5を持っているので、あなたの出力には5つのゼロがどこから来た、これは0です。

に設定されていますrにあり、これはrベクターの最後に他の要素を追加します。

より良いヘルプを得るには、目標を明確にしてください。

関連する問題