如何将txt文件读入vector并cout该文件?

时间:2014-06-09 19:56:16

标签: c++ file vector

#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

我的经验几乎为零,并且有关为什么无法打开的一些指导将非常有帮助。

3 个答案:

答案 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';
    }