#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<int> temp;
ifstream infile;
infile.open("numbers");
if (infile.fail())
{
cout << "Could not open file numbers." << "\n";
return 1;
}
int data;
infile >> data;
while (!infile.eof()) {
temp.push_back(data);
infile >> data;
}
cout << data << " " << endl;
}
我只是想使用向量来尝试文本文件“数字”中的所有数字。
15
10
32
24
50
60
25
我的经验几乎为零,并且有关为什么无法打开的一些指导将非常有帮助。
答案 0 :(得分:2)
您的代码无效,因为您没有尝试从矢量中打印任何内容?
如何打印矢量?
首先,您必须了解不如何打印矢量。代码中的最后一行,特别是这一行:
cout << data << " " << endl;
只打印出文本文件中的最后一个整数。在执行输入的循环中,infile >> data
覆盖了data
的每个先前值,并将其分配给文件中当前读取的值。结果是,当循环结束时,data
将等于上次读取的值,尤其是查看文件的25
。
operator<<()
没有超载允许你做cout << temp
这样的事情,尽管你可以自己实现。{1}}。有几种方法可以打印矢量,最简单的就是一个简单的循环:
for (unsigned i = 0; i < temp.size(); ++i)
std::cout << temp[i] << " ";
Bonus:打印所有整数的更快方法是从循环内部打印data
。 @KerrekSB也有答案。
答案 1 :(得分:1)
你的代码很好,但是你打错了。 将main的底部更改为此
int data;
while (infile >> data) {
temp.push_back(data);
}
for( vector<int>::iterator i = temp.begin(); i != temp.end(); i++) {
cout << *i << endl;
}
*阅读建议的副本后编辑。
答案 2 :(得分:0)
试试这个:
#include <fstream>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::ifstream infile("data.txt");
if (!infile) { /* error opening file */ }
for (int n : std::vector<int>(std::istream_iterator<int>(infile), {}))
{
std::cout << n << '\n';
}
}
当然,如果您只是想处理数字,那么您不需要矢量:
for (std::istream_iterator<int> it(infile), end; it != end; ++it)
{
std::cout << *it << '\n';
}