我有一个txt文件:
4286484840 4286419048 4286352998
(它们是RGB值。)
我想将它们存储在矢量中。
void read_input(const char* file, std::vector<int>& input)
{
std::ifstream f(file);
if (!f)
{
std::cerr << file << "Read error" << std::endl;
exit(1);
}
int c;
while (f >> c)
{
std::cout << c << std::endl;
input.push_back(c);
}
std::cout << "Vector size is: " << input.size() << std::endl;
}
结果是:
Vector size is: 0
但是使用以下文件:
1 2 3
结果是:
1
2
3
Vector size is: 3
第一个文件有什么问题?数字太大了吗?
答案 0 :(得分:2)
是的,这些数字可能太大了。在当今最常见的系统上,int
为32位,其最大值为2^31-1
,但它仅保证为2^15-1
(需要16位)。您可以通过以下方式检查您的限制:
#include <limits>
#include <iostream>
int main()
{
std::cout << std::numeric_limits<int>::max();
}
为了保证代表大的值,您可以使用long long
。 unsigned long
也会这样做,但几乎没有。如果您需要特定大小的整数,我建议您查看<cstdint>
标题。
答案 1 :(得分:0)
void read_input(const char* file, std::vector<unsigned long int>& input)
{
std::ifstream f(file);
if (!f)
{
std::cerr << file << "Read error" << std::endl;
exit(1);
}
int c;
while (f >> c)
{
std::cout << c << std::endl;
input.push_back(c);
}
std::cout << "Vector size is: " << input.size() << std::endl;
}