C++ 打印出每对向量元素的和-C++;
我试图打印出向量中每对相邻元素的和。但是下面显示的代码没有给出正确的结果。有人能帮我吗 int main() {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; ++射程;
向量数(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
在这些零之后添加元素。仅此一点无法修复任何问题。顺便说一句,他没有使用垃圾数据,这是他访问过的唯一元素renum[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;