C++ 将文件读入容器
示例
在下面的示例中,我们使用std::string和operator>>从文件中读取项目。
std::ifstream file("file3.txt");
std::vector<std::string> v;
std::string s;
while(file >> s) //继续阅读直到我们用完为止
{
v.push_back(s);
}在上面的示例中,我们只是简单地遍历文件,一次使用读取一个“项目”operator>>。使用,std::istream_iterator这是一个输入迭代器,可以一次从流中读取一个“项目”,也可以实现相同的效果。同样,大多数容器可以使用两个迭代器构造,因此我们可以将上面的代码简化为:
std::ifstream file("file3.txt");
std::vector<std::string> v(std::istream_iterator<std::string>{file},
std::istream_iterator<std::string>{});我们可以将其扩展为读取所需的任何对象类型,只需将要读取的对象指定为的模板参数即可std::istream_iterator。因此,我们可以简单地将上述内容扩展为读取行(而不是单词),如下所示:
// Unfortunately there is no built in type that reads line using >>
//因此,在这里我们建立一个简单的帮助器类来完成它。那将转换
//在字符串上下文中使用时返回到字符串。
struct Line
{
//在此处存储数据
std::string data;
//将对象转换为字符串
operator std::string const&() const {return data;}
//从流中读取一行。
friend std::istream& operator>>(std::istream& stream, Line& line)
{
return std::getline(stream, line.data);
}
};
std::ifstream file("file3.txt");
//将文件的行读入容器。
std::vector<std::string> v(std::istream_iterator<Line>{file},
std::istream_iterator<Line>{});