我正在尝试打印向量中每对相邻元素的总和。但是下面显示的代码并没有给我正确的结果。有人可以帮我这个吗?
int main() {
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;
}
答案 0 :(得分:0)
我认为问题在于循环增量。 试试这个
while (range < num.size())
{
int c = 0;
int c1 = c + 1;
res.push_back(num[c] + num[c1]);
c += 2;
++range;
}
答案 1 :(得分:0)
我必须更改您的代码以使其编译并使其可重现(一个好的MCVE不需要用户输入):
#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] << " ";
}
}
您的问题是,您将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;
}
如果这是作业,我建议你确保在交付之前完全理解它。
答案 2 :(得分:0)
您为什么这样做:
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],依此类推。
我可以看到两种解决方法:
1)如果要进行相邻的加法运算,例如0 + 1、1 + 2、2 + 3,则只需执行c ++而不是这三行代码即可。 2)如果您要进行相邻的加法运算(例如0 + 1、2 + 3、4 + 5),则可以简单地执行c = c1 + 1而不是那三行代码。
答案 3 :(得分:-2)
除了评论中提到的内容之外,我在这里看到的最大问题是,您只是将范围增加1而不是2.这会导致您的代码超过结尾向量,这意味着你的总和被垃圾数据破坏了。