我在文本文件中有一个未知数量的int变量,我所知道的是变量的数量是6的倍数。
我想将这些文件读入容器,然后将它们拆分为较小的容器,每个容器需要6个值。
例如,如果文本文件中有30个变量,我想要5个容器,每个容器包含6个变量。它们需要按照它们在文件中的顺序,即第一个容器保存前六个值。
我已经将文件读入列表,暂时传真,并且正在徘徊哪一个更适合。我已经阅读过关于分割功能的内容了,但是看了看之后,我还没能成功地将它应用于其中一个尝试,主要是因为我不知道我需要多少个小容器
到目前为止,这是我的代码:
矢量方法
std::vector<int> Ticket;
std::ifstream fin (username + "Ticket.txt");
while (!fin.eof())
{
fin >> num;
Ticket.push_back(num);
}
fin.close();
Ticket.shrink_to_fit();
列表方法
std::list<int> Ticket1;
std::ifstream fin (username + "Ticket.txt");
while (!fin.eof())
{
fin >> num;
Ticket1.push_back(num);
}
fin.close();
或者,如果我能以某种方式从文件中直接读取6个值到较小的容器中,并继续这样做直到文件的末尾,因此跳过那个很棒的大容器。
答案 0 :(得分:2)
您可以使用矢量矢量。
std::vector< std::vector<int> > Ticket;
std::vector<int> newVector;
std::ifstream fin (username + "Ticket.txt");
while ( fin >> num )
{
newVector.push_back( num );
// if the vector is full, then insert it and start afresh
if ( newVector.size() == 6 ) {
Ticket.push_back( newVector );
newVector.clear();
}
}
fin.close();
最后,故障单向量应包含所有必需的向量。
要将每个向量打印到控制台,请使用两个嵌套循环:
for ( int i = 0; i < Ticket.size(); i++ ) { // outer vector
for ( int j = 0; j < Ticket[i].size(); j++ ) { // inner vectors
std::cout << Ticket[i][j] << " ";
}
std::cout << "\n";
}
答案 1 :(得分:1)
如果你创建了一个临时累加器,那么你的最终目的地是:
vector<int> temp ;
vector<vector<int>> package ;
然后填写temp
,直到它完整,并推到package
的末尾:
while ( fin >> num )
{
temp.push_back( num) ;
if ( temp.size() == MyDesiredSize ) { package.push_back( temp) ; temp.clear() ; }
}
push_back
package
它会复制,这就是您之后可以清除temp
的原因。
答案 2 :(得分:1)
您是否需要容器内的值是连续的,因为它们在c-array中,或者您是否需要使用std :: vector的reserve成员函数来更好地控制内存分配?如果没有,那么考虑deque或列出向量。 http://www.cplusplus.com/reference/deque/deque/
如果您有支持它的C ++ 11编译器,也可以使用固定大小的数组。 http://www.cplusplus.com/reference/array/array/
例如,您可以设置这样的容器来设置数组列表。
std::list<std::array<int, 6>> containersOfSix;
另一方面,如果您希望容器的两个部分都是动态的,则可以使用其中一个插入器功能。
http://www.cplusplus.com/reference/iterator/istream_iterator/
http://www.cplusplus.com/reference/iterator/insert_iterator/
考虑阅读这些材料,并尝试使用其中的一些选项。这可能会导致您搜索与其相关的其他线程,这将帮助您找到更具体的示例。
答案 3 :(得分:0)
我会使用C函数Fscanf()
您可以使用格式并一次读取6个数字。
fscanf(FILE,"%i %i %i %i %i %i",&var1,&var2,&var3,&var4,&var5,&var6)
然后你只需要处理容器,在之前创建一个容器并直接读取容器,或者如果它们符合您的预期,则应对它们。