结构数组,非常数

时间:2016-10-28 23:42:06

标签: c++ arrays struct

如果需要根据所使用的文件更改数组的大小,是否可以创建结构数组?

我正在创建一个结构数组,但我从文件中填充结构。我需要根据文件中的行数来确定数组的大小。

----好的,谢谢,它是一个工作的副项目,并没有在学校使用矢量.----

1 个答案:

答案 0 :(得分:-1)

由于您还没有在学校了解标准库,这里有一个演示如何使用标准库从文本文件创建数组(std::vector),以及如何处理失败

代码并不实用。 对于实用代码,我只使用一个循环,在每次迭代中,getline然后push_back在向量上。

希望这能为您提供一些有关这方面的想法,以及显示哪些标题需要什么。 :)

#include <algorithm>
using std::copy;

#include <iostream>
using std::cout; using std::cerr; using std::istream;

#include <fstream>
using std::ifstream;

#include <stdexcept>
using std::exception; using std::runtime_error;

#include <stdlib.h>     // EXIT_xxx

#include <string>
using std::string;

#include <vector>
using std::vector;

#include <iterator>
using std::back_inserter; using std::istream_iterator;

auto hopefully( bool const e ) -> bool { return e; }
auto fail( string const& message ) -> bool { throw runtime_error( message ); }

class Line
{
private:
    string  chars_;

public:
    operator string& () { return chars_; }
    operator string const& () const { return chars_; }
    //operator string&& () && { return chars_; }

    friend
    auto operator>>( istream& stream, Line& line )
        -> istream&
    {
        getline( stream, line.chars_ );
        hopefully( stream.eof() or not stream.fail() )
            || fail( "Failed reading a line with getline()" );
        return stream;
    }
};

void cppmain( char const filename[] )
{
    ifstream f( filename );
    hopefully( not f.fail() )
        || fail( "Unable to open the specified file." );

    // This is one way to create an array of lines from a text file:
    vector<string> lines;
    using In_it = istream_iterator<Line>;
    copy( In_it( f ), In_it(), back_inserter( lines ) );

    for( string const& s : lines )
    {
        cout << s << "\n";
    }
}

auto main( int n_args, char** args )
    -> int
{
    try
    {
        hopefully( n_args == 2 )
            || fail( "You must specify a (single) file name." );
        cppmain( args[1] );
        return EXIT_SUCCESS;
    }
    catch( exception const& x )
    {
        cerr << "!" << x.what() << "\n";
    }
    return EXIT_FAILURE;
}