我在文本文件中有大量数据:
1 0.933 2 0.865 3 0.919 4 0.726
2 0.854 3 0.906 4 0.726
2 0.882 5 0.853 4 0.897
.
. etc
每个整数都跟随其浮点值。我想逐行阅读这个文件,并将每一行存储在列表中。我知道如何使用链表列表来做到这一点,但是,我无法修复内存泄漏。我读到最好使用STL代替。 示例:
list 1= 1 0.933 2 0.865 3 0.919 4 0.726
list 2= 2 0.854 3 0.906 4 0.726
list 3= 2 0.882 5 0.853 4 0.897
.
.
我不确定(列表的向量)是否与(链表的数组)类似。我尝试了不同的方法,但我的所有尝试都失败了。
#include "stdafx.h"
#include <vector>
#include <list>
#include <iostream>
#include <map>
#include <sstream>
#include <iterator>
#include <fstream>
struct MyData{
int Item;
float Prob;
};
std::istream& operator>>(std::istream &is, MyData&d)
{
return is >> d.Item >> d.Prob;
}
int main()
{
std::ifstream in("DataF.txt");
std::string line;
int i = 0;
while (std::getline(in, line)) {
typedef std::istream_iterator<MyData> MyDataIstrIt;
std::stringstream ss(line);
std::vector< std::list< MyData> > data3{ MyDataIstrIt(ss), MyDataIstrIt() }; // here I couldn't fix the extractor definition for the vectors of lists
// another attempt
/*std::vector<MyData> data{ MyDataIstrIt(ss), MyDataIstrIt() };
std::vector< std::list< MyData> > data2;
data2.push_back(std::vector<MyData>()); // I read this is important for memory leak
data2.push_back(data);*/
// data2[i].push_back(data);
// ++i;
}
system("PAUSE");
return 0;
}
答案 0 :(得分:3)
有更好的方法可以做到这一点,但为了向您展示如何使用列表或读入一个列表然后将其放入向量中..
#include <vector>
#include <list>
#include <iostream>
#include <map>
#include <sstream>
#include <iterator>
#include <fstream>
struct MyData
{
int Item;
float Prob;
};
std::istream& operator>>(std::istream &is, MyData&d)
{
return is >> d.Item >> d.Prob;
}
int main()
{
std::string line;
std::vector<std::list<MyData>> data;
std::ifstream in("DataF.txt"); //don't forget to check `if (in.is_open())`
while(std::getline(in, line))
{
std::stringstream ss(line);
std::list<MyData> inner;
MyData info;
while(ss >> info)
{
inner.push_back(info);
}
data.push_back(inner);
}
for (auto &list : data)
{
for (auto &mdata : list)
{
std::cout<<mdata.Item<<" "<<mdata.Prob<<"\n";
}
}
}