【发布时间】:2014-01-03 04:29:42
【问题描述】:
我是 C++ 新手,遇到了第一个无法通过谷歌搜索解决的问题。
我有一组数据文件,每行一条记录。每个文件都按一个键排序,但某些文件中缺少一些记录。我的计划是逐行解析这些数据,从最低记录中提取数据,并在适当的地方添加缺失的数据。
使用的文件数量会随着代码的一次运行而改变,因此保存文件流的类/容器可以是可变大小的(排除数组和我认为的指针向量)很重要.
这是我现在拥有的一个简单版本,它不会编译,因为 ifstreams 有一个已删除的复制构造函数(我认为 move 和 c++11 可能有我,显然不是)。正如我所说,这是我使用 C++ 的第一周,如果有一种完全不同的方法更适合这个问题,我很高兴听到它。
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
class FileParser{
ifstream file_stream;
public:
FileParser(string);
string next();
};
FileParser::FileParser(string fname){
file_stream.open(fname);
}
string FileParser::next(){
string L;
getline(file_stream, L);
// do lots of parsing...
return L;
}
int main(){
vector<string> fnames = {"test1", "test2"};
vector<FileParser> parsers;
for(size_t i = 0; i < fnames.size(); ++i){
FileParser p (fnames[i]);
parsers.push_back( move(p) )
}
//loop through all files, find matching records, do stuff
cout << parsers.size() << endl;
return 0;
}
【问题讨论】:
-
试试
emplace_back而不是push_back。
标签: c++ c++11 vector copy-constructor ifstream