C++ 打印出每对向量元素的和-C++;

C++ 打印出每对向量元素的和-C++;,c++,vector,C++,Vector,我试图打印出向量中每对相邻元素的和。但是下面显示的代码没有给出正确的结果。有人能帮我吗 int main() { 向量数(10); 向量res(5); int-get=0; int范围=0; 对于(int i=0;i!=10;++i){ cin>>获取; num.push_back(get); } while(范围!=num.size()){ int c=0; int c1=c+1; res.push_back(num[c]+num[c1]); 如果(c==0) c=1; c*=2; ++射程;

我试图打印出向量中每对相邻元素的和。但是下面显示的代码没有给出正确的结果。有人能帮我吗

int main() {

向量数(10);
向量res(5);
int-get=0;
int范围=0;
对于(int i=0;i!=10;++i){
cin>>获取;
num.push_back(get);
}
while(范围!=num.size()){
int c=0;
int c1=c+1;
res.push_back(num[c]+num[c1]);
如果(c==0)
c=1;
c*=2;
++射程;
}

cout除了在评论中提到的以外,我在这里看到的最大问题是,您只将范围增加1而不是2。这会导致代码超出向量的末尾,这意味着您的总和被垃圾数据损坏。

我认为问题在于循环增量。 试试这个

while (range < num.size()) 
{
        int c = 0;
        int c1 = c + 1;
        res.push_back(num[c] + num[c1]);
        c += 2;
        ++range;
 }
while(范围
我必须更改您的代码,使其可编译并可复制(好的MCVE不需要用户输入):


如果这是家庭作业,我建议你在交作业之前确保完全理解。

你为什么这样做:

if (c == 0)
    c = 1;
c *= 2;
它在第一次迭代中做的是,c=1,然后乘以2,所以第二次迭代的c=2,c1变成3。 因此,首先您的代码将执行num[0]+num[1],在下一次迭代中,它将执行num[2]+num[3],第三次执行num[4]+num[5],第四次执行num[8]+num[9],依此类推

我可以看到两种方法:

< P > 1)如果你想做相邻的加法,比如0 + 1, 1 + 2, 2 + 3,那么简单地做C++而不是那些三行代码。
2) 如果你想做像0+1、2+3、4+5这样的相邻加法,你可以简单地做c=c1+1而不是这三行代码。

你试过一步一步地调试它吗?c似乎总是0,c1总是1,因为你在while循环中声明了它们。你在
while()中的每次迭代中初始化
c
c1
loop。这是故意的吗?最好在调试器中运行程序并逐行执行。向量已经分别包含10个和5个元素。这些元素都是零,使用
push_back
在这些零之后添加元素。仅此一点无法修复任何问题。顺便说一句,他没有使用垃圾数据,这是他访问过的唯一元素re
num[0]
num[1]
代码重复地添加
num[0]
num[1]
,它们是有效的(它们是0)。@molbdnilo,不,
c
从0到1,然后它被乘以(出于某种原因)每次迭代两次,因此它将逐步通过二进制幂:0,2,4,8,…。@TobySpeight更新的代码会这样做,但原始代码在循环中有
int c=0;
while (range < num.size()) 
{
        int c = 0;
        int c1 = c + 1;
        res.push_back(num[c] + num[c1]);
        c += 2;
        ++range;
 }
#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] << " ";
    }
}
#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;
}
if (c == 0)
    c = 1;
c *= 2;