奇怪的矢量<long>加法,'0'为'-1'
Weird vector<long> addition with '0' as '-1'
我正在编写一个基本的国际象棋程序来计算你可以用给定的国际象棋数字制作多少组。数据文件:
4
22 3 5 6 2 0
1 1 1 1 1 1
8 4 4 4 1 2
5 3 3 3 0 2
代码:
#include <iostream>
#include <fstream>
#include <vector>
int main
(int argc, char *argv[])
{
std::fstream data_file;
size_t i, k;
std::vector<long> chess;
long t, n;
data_file.open("U1.txt", std::ios::in);
data_file >> n;
for (i = 0; i < n; i++)
chess.push_back(0);
for (i = 0; i < n; i++) {
for (k = 0; k < 6; k++) {
data_file >> t;
std::cout << t << " ";
chess[k] += t;
}
std::cout << std::endl;
}
data_file.close();
for (int i = 0; i < 6; i++)
std::cout << chess[i] << " ";
std::cout << std::endl;
data_file.open("U1rez.txt", std::ios::out);
data_file << n;
std::cout << n << std::endl;
data_file.close();
return EXIT_SUCCESS;
}
输出:
22 3 5 6 2 0
1 1 1 1 1 1
8 4 4 4 1 2
5 3 3 3 0 2
36 11 13 14 3 4
4
为什么我在 36、11、13 和 14 之后的第 5 行的最终结果中得到 3 和 4?当我打印测试值时,我似乎得到了正确的数字,但是将它们添加到矢量容器中时出现了严重的错误。
for (i = 0; i < n; i++)
chess.push_back(0);
...
for (i = 0; i < n; i++) {
for (k = 0; k < 6; k++) {
data_file >> t;
std::cout << t << " ";
chess[k] += t;
}
std::cout << std::endl;
}
在这里,您初始化了向量中的 n(=4( 个位置,但在这里您正在访问向量国际象棋的索引 4 和 5,这导致了加法问题。
在一个不相关的说明中,如果你放弃 C 强加的一些规则,你会更容易地使用 C++。
- C++ API 使用范围限定的资源管理;即,无需在此处显式关闭文件句柄,因为当在声明的范围结束时调用其析构函数时,该类会为您执行此操作。
- 首选
std::cout << "n"
而不是std::cout << std::endl
,除非您实际上打算插入换行符并刷新缓冲区。很多C++程序员还在用printf
,我个人认为它比C++丑陋的IO标准解决方案要优雅很多——随意使用printf
。 - 当您在使用变量的位置声明变量时,您是否发现您的代码更易于管理和阅读(例如
for (size_type i = 0; ... ; ...)
(,而不是在你的方法开始时?这也允许编译器在寄存器用法方面做出更好的选择,因为它具有有关临时变量范围的更多信息。
以下是 C++11 的一些功能,它们也可以为您节省一些时间:
- 自动类型推断:当编译器可以推断变量的类型时,您不必显式指定它;您可以使用
auto
代替(例如auto x = parse_data();
(。 - 范围:如果您在提供全局定义
begin()
和end()
的容器(例如任何标准容器(上运行,则代替此:
typedef typename container_type::const_iterator iter;
for (iter i = begin(container), iter l = end(container); i != l; ++i) { ... }
您可以这样做:
for (const auto& x : container) { ... }
我只是想给你一些快速的指示,可以节省一些时间。
相关文章:
- EASTL矢量<向量<int>>连续的
- 字符串中int的加法运算
- 对已具有设定值的整数变量的加法
- 向量加法代码 OpenCL 返回 clCreateKernel 错误 -46
- 为什么矩阵加法比特征中的矩阵-向量乘法慢?
- OpenCV矩阵奇怪的加法,乘法与浮点数和8位值
- 重载加法运算符(使用函数向对象添加字符串)
- CPP 中的字符串加法关联性
- 如何修复加法/乘法表错误?
- 在 c 中给定一个固定数的情况下,找到所有可能的加法和组合(给定一个总和,找到它的可能的加法和排列
- 仅使用加法/递归C++对数字进行平方
- 为什么与普通加法相比,使用 += 运算符进行加法更快
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 对压缩整数进行加法、减法和比较
- 用于加法和减法的十六进制计算器
- 特征中的稀疏矩阵和向量加法广播
- 为什么乘法与C++双精度类型值的加法一样快?
- 如何在长整中使用加法?
- 结构上溢出的整数加法
- 复制构造函数和重载加法运算符