如果需要根据所使用的文件更改数组的大小,是否可以创建结构数组?
我正在创建一个结构数组,但我从文件中填充结构。我需要根据文件中的行数来确定数组的大小。
----好的,谢谢,它是一个工作的副项目,并没有在学校使用矢量.----
答案 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;
}