2016-11-03 10 views
-2

ベクトルの隣接要素の各ペアの合計を出力しようとしています。しかし、以下のコードは私に正しい結果を与えていません。誰もがこれで私を助けることができますか?ベクトル要素の各ペアの合計を出力する - C++

メインint型() {

vector <int> num(10); 
vector <int> res(5); 
int get = 0; 
int range = 0; 

for (int i = 0; i != 10; ++i) { 
    cin >> get; 
    num.push_back(get); 
} 

while (range != num.size()) { 
    int c = 0; 
    int c1 = c + 1; 
    res.push_back(num[c] + num[c1]); 
    if (c == 0) 
     c = 1; 
    c *= 2; 
    ++range; 

} 
cout << res[7]; 

for (int u = 0; u != res.size(); ++u) { 
    cout << res[u] << " "; 
} 

return 0; 

}

アップデート: -

あなたはコメント欄で述べたように、私はこのコードを変更しましたが、私はそれをコンパイルするとき私にデバッグエラーが表示されます。

「num」ベクトルに1〜10の整数を読み取ることができました。しかし、ベクトルにすべての整数を読み込んだ後にEnterキーを押すと、このデバッグエラーが発生します。

int main() 
{ 

    vector <int> num; 
    vector <int> res; 

    int get = 0; 
    int range = 0; 
    int c = 0, c1 = 0; 

    for (int i = 0; i != 10; ++i) { 
     cin >> get; 
     num.push_back(get); 
    } 

    while (range != num.size()) { 
     c1 = c + 1; 
     res.push_back(num[c] + num[c1]); 
     if (c == 0) 
      c = 1; 
     c *= 2; 
     ++range; 

    } 

    for (int u = 0; u != res.size(); ++u) { 
     cout << res[u] << " "; 
    } 

    keep_window_open(); 
    return 0; 
} 
+3

あなたはそれをステップバイステップでデバッグしようとしたことがありますか? –

+1

cは、whileループ内で宣言しているので、常に0、c1常に1と思われます。 – LangerJan

+1

'while()'ループのすべての反復で 'c'と' c1'を初期化します。それは意図されていますか?デバッガでプログラムを実行し、行単位で実行するのが最適です。 –

答えて

-2

私はここを参照してください最大の問題は、コメントで述べたものに加えて、あなただけのこれはあなたのコードはの終わりをオーバーシュートする原因となる1ではなく2で範囲をインクリメントしているということですこれはあなたの合計がガベージデータによって壊れていることを意味します。

+0

それだけでは何も修正されません。 Btwはガベージデータを使用していないので、彼が今までにアクセスした要素はnum [0]とnum [1]です – user463035818

+0

コードはnum [0]とnum [1]を繰り返し追加しています。有効です(0になります)。 – molbdnilo

+0

@molbdnilo、いいえ、 'c'は0から1になり、何らかの理由で各繰り返しが2回繰り返されるので、バイナリの出力は0,2,4,8、...となります。 .. –

0

私は問題がループインクリメントにあると思います。 (良いMCVEは、ユーザー入力を必要としない)、私はそれをコンパイルするために、それを再現可能にするために、あなたのコードを変更する必要がありました。この

while (range < num.size()) 
{ 
     int c = 0; 
     int c1 = c + 1; 
     res.push_back(num[c] + num[c1]); 
     c += 2; 
     ++range; 
} 
0

をお試しください:

#include <iostream> 
#include <vector> 

int main() 
{ 
    const std::vector<int> num = 
     { 0, 0, 
      5, 10, 
      -5, 5, 
      3, -20}; 

    std::vector<int> res; 
    unsigned int range = 0; 
    int c = 0, c1 = 0; 

    while (range != num.size()) { 
     c1 = c + 1; 
     res.push_back(num[c] + num[c1]); 
     if (c == 0) 
      c = 1; 
     c *= 2; 
     ++range; 
    } 

    for (unsigned int u = 0; u != res.size(); ++u) { 
     std::cout << res[u] << " "; 
    } 
} 

あなたの問題は、あなたがしていることですそれぞれの反復を2回追加する代わりに、cに2を掛けます。ここで

は、より慣用的なバージョンです:。

#include <iostream> 
#include <vector> 

int main() 
{ 
    const std::vector<int> num 
     = { 0, 0, 
      5, 10, 
      -5, 5, 
      3, -20, }; 

    std::vector<int> res; 

    const auto last = num.end(); 
    for (auto it = num.begin(); it != last; ) { 
     auto v = *it++; 
     res.push_back(v + (it == last ? 0 : *it++)); 
    } 

    for (auto v: res) 
     std::cout << v << " "; 
    std::cout << std::endl; 
} 

これは宿題であれば、私はあなたがそれを手前に、あなたは完全にそれを理解していることを確認示唆

関連する問題