打印出每一对向量元素的和
Printing out sum of each pair of vector elements - C++
我试图打印出向量中每对相邻元素的总和。但是下面显示的代码没有给我正确的结果。有人能帮我吗?
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;
}
更新:-
我已经更改了您在注释部分提到的代码,但是当我编译它时,显示了一个调试错误。
我能够将1-10个整数读入'num'向量。但是当我把所有的整数读入vector后按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;
}
你为什么要这样做:
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,而不是这三行代码。
我认为问题是在循环增量。试试这个
while (range < num.size())
{
int c = 0;
int c1 = c + 1;
res.push_back(num[c] + num[c1]);
c += 2;
++range;
}
我不得不改变你的代码,使其可编译并使其可复制(一个好的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,而不是添加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;
}
如果这是家庭作业,我建议你在交作业前一定要完全理解。
使用STL迭代器的一个解决方案:
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> v
{ 0, 0,
5, 10,
-5, 5,
3, -20};
for(auto& r : v) std::cout << r << "t"; std::cout << std::endl; // print
//Calculate now the adjacent sum (sum of consecutive elements)
std::adjacent_difference(v.begin(), v.end(), v.begin(), [](const int x, const int y) { return x+y; });//here, set execution policy to parallel if wanted
v.erase(v.begin()); // pop_front
// print now every second element. Change i+=2 to i++ if you want every consecutive sum
for(size_t i = 0; i<v.size(); i+=2) std::cout << v[i] << "t"; std::cout << std::endl;
return 0;
}
的结果是:
0 0 5 10 -5 5 3 -20
0 15 0 -17
我在这里看到的最大的问题,除了在评论中提到的,是你只增加范围 1而不是2。这会导致您的代码超过向量的末尾,这意味着您的总和被垃圾数据破坏了。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- C++:如何循环通过向量中的整数元素
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 不允许在向量中添加更多元素
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用并行参数向量调用元素向量的成员函数
- C++ 查找字符串中存在的元素向量
- 包含 std::threads 的元素向量
- 避免从单一元素向量转换为基元类型
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- 如何为对元素(向量和int)配对创建unique_ptr也是unique_ptr
- 元素向量乘法 C++(代码不起作用)
- 时间和空间复杂性在二叉树的每个级别创建元素向量(NON-BST)
- 遍历结构元素向量
- 犰狳C++中的元素向量或矩阵乘法
- 为什么'std::vector<int> b{2};'创建 1 元素向量,而不是 2 元素向量?
- 可移动元素向量的大小调整是否有效?
- 唯一元素向量的c++模板函数
- 获取索引和元素-向量问题
- 定义一个生成元素向量的函数时,正确的方法是什么?