显示矢量的内容

时间:2016-02-02 06:13:36

标签: c++ vector

我无法显示矢量的内容。我不确定这是否是我从文本文件中读取值的方式,或者我的显示功能是否正常工作。

    #include <iostream>
#include <string>
#include <vector>
#include <fstream>

using namespace std;

int main()
{
    string line;
    int n,length;
    std::vector<int>arr1;
    fstream file("t1.txt");
    if(file.is_open())
    {
        while (getline(file,line))
        {
            cout << line << endl;
        }
        file << line;
        length = line.length();
        while(file >> n)
            arr1.push_back(n);
        for(int i =0; i < (int)arr1.size(); i++)
            cout << arr1.at(i) << endl;
    }
    return 0;
}

非常感谢任何帮助。

文本文件包含&#34; 5 2 5 5 -1 7 2 5 3 5 2 -2&#34;

1 个答案:

答案 0 :(得分:3)

我想你有一个矢量构建问题(从文件到矢量读取值)。您应该使用getline删除(或评论)表达式,以及将行写回文件(file << line),并仅使用file >> n

尝试以下缩短版程序

#include <iostream>
#include <string>
#include <vector>
#include <fstream>

using namespace std;

int main()
{
    string line;
    int n;
    std::vector<int> arr1;
    fstream file("t1.txt");
    if(file.is_open())
    {
        while(file >> n)
            arr1.push_back(n);
        for(int i =0; i < (int)arr1.size(); i++)
            cout << arr1.at(i) << endl;
        file.close();
    }
    return 0;
}

初始代码的问题在于,从文件中读取行(仅包含一行)后,下次读取(无论是file >> ...还是getline(...))将不提供数据,因为END OF FILE 。要再次从文件中读取数据,您应该重新打开它

        ...
        length = line.length();
        file.close();
        file.open("t1.txt");
        while(file >> n)
            arr1.push_back(n);
        ...

或回到开头

        ...
        length = line.length();
        file.clear();
        file.seekg(0, ios_base::beg);
        while(file >> n)
            arr1.push_back(n);
        ...

但是您应该理解,写入文件流并不能提供所需的效果 - 只有在将缓冲区中的写入数据传输到文件后(在一般情况下,文件关闭后),记录的数据才可用。

修改

另外我想补充一点,C ++允许向量输入和向量输出而无需额外的循环,只需考虑以下示例

    if(file.is_open())
    {
        // filling vector from the stream
        istream_iterator<int> it(file); // iterator for int values in file
        istream_iterator<int> eos; // end of straem
        arr1.insert(arr1.begin(), it, eos);
        // output vector to the stream (cout = standard output stream)
        ostream_iterator<int> oit (cout,"\n"); // "\n" = new line is a separator for output
                                               // also " " or any other separator can be used
        copy(arr1.begin(), arr1.end(), oit);
    }