矢量操作并存储到第三个矢量中
vector manipulations and storage into a third vector
我使用以下代码将两个向量 a 和 b 中的量差存储到向量 d 中,但它无法正常工作。你能告诉错误在哪里吗?输入文件包含如下文本:10-对数
8 50 //value in a -space- value in b
74 59
31 73
45 79
24 10
41 66
93 43
88 4
28 30
41 13
代码:
long int x, i = 0, j = 0;
FILE *fp = fopen("jobs.txt", "r");
fscanf(fp, "%lu", &x);
long int c = x;
vector<long int> a;
vector<long int> b;
vector<long int> d;
while (fscanf(fp, "%lu", &x) != EOF)
{
a.pb(x);
i++;
fscanf(fp, "%lu", &x);
b.pb(x);
j++;
}
int k = 0;
while (k < c)
{
d.pb(a[k] - b[k]);
k++;
}
我认为
问题可能是您使用 fscanf 读取的第一个值实际上被丢弃了,因为它会立即被对 fscanf 的第二次调用(while 条件中的调用)覆盖。这样,您可能会以错误的方式读取该值,将第一对的第二个值与第二个值的第一个值进行比较,依此类推。只需删除第 3 行上的 fscanf 调用即可。
关于逐元素向量差分计算,一种简单的方法是使用标准库算法(如std::transform
)和函数对象(如std::minus
)。此示例计算两个向量的元素差值,并将其存储在第三个向量中:
#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>
int main()
{
std::vector<int> a={10, 10, 10, 10, 10};
std::vector<int> b={0, 1, 2, 3, 4};
std::vector<int> c;
std::transform(a.begin(),
a.end(),
b.begin(),
std::back_inserter(c),
std::minus<int>());
for (const auto& i : result)
std::cout << i << " ";
std::cout << std::endl;
}
关于将数字对读取到两个向量中,您可以考虑从std::ifstream
读取。
#include <fstream>
#include <vector>
int main()
{
std::ifstream fp("jobs.txt");
int ia, ib;
while (fp >> ia >> ib)
{
a.push_back(ia);
b.push_back(ib);
}
}
我相信
问题是,您没有处理scanf()
调用中的空格。您可以使用以下方法轻松读取值对
scanf("n%lu %lu", &ia, &ib)
或
scanf("%lu %lun", &ia, &ib)
取决于您是要使用前导换行符还是尾随换行符。
相关文章:
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 我有三个 getline,但是一旦编译,输入就太多了
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 有没有更好的方法对C++中的三个整数进行排序?
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 为什么 getch 在按下函数或箭头键时返回三个值?
- 使用三个数字比较器进行排序
- 我想在C++代码中比较这三个术语
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 如何通过通用引用或std::forward将这三个c++模板函数合并为一个
- 首先处理第二个和第三个堆与第一个和第二个堆之间的逻辑差异
- 异常处理:如果用户输入不是三个特定字符之一
- 矢量操作并存储到第三个矢量中
- 空白或不执行任何操作的三元运算符的第二个或第三个参数