0

我正在尝试使用 shared_ptr 指针从文件中读取。我不知道如何使用插入运算符。这是代码:

#include <iostream>
#include <regex>
#include <fstream>
#include <thread>
#include <memory>
#include <string>
#include <map>
using namespace std;

int main()
{
    string path="";    
    map<string, int> container;
    cout<<"Please Enter Your Files Path: ";
    getline(cin,path);

    shared_ptr<ifstream> file = make_shared<ifstream>();
    file->open(path,ifstream::in);
    string s="";
    while (file->good())
    {
        file>>s;
        container[s]++;
        s.clear();
    }

    cout <<"\nDone..."<< endl;
    return 0;
}

简单地做:

file>>s;

不起作用。

如何获取文件指向的当前值(我不想获取整行,我只需要以这种方式获取它们出现的单词和数量)。

顺便说一句,我使用 shared_ptr 来避免自己关闭文件,是否制作这种类型的指针,shared_ptr(智能)不写file->close()自己就足够了吗?还是它们无关紧要?

4

2 回答 2

4

最简单的方法是使用取消引用operator *

(*file) >> s;

但是查看代码,我认为没有任何理由使用智能指针。你可以只使用一个ifstream对象。

std::ifstream file(path); // opens file in input mode
于 2013-07-20T07:24:58.433 回答
3

为什么你希望它是一个指针?就是那个让你痛苦。

ifstream file;
file.open( ...
...
file>>s;

流旨在被视为值(而不是指针类型)。当在ifstream.

如果您需要在代码的其他部分传递流对象,您只需使用引用(对基类):

void other_fn( istream & f )
{
    string something;
    f>>something;
}

ifstream file;
other_fn( file );

因为f参数是一个引用,所以当它超出范围时它不会尝试关闭流/文件 - 这仍然发生在定义原始ifstream对象的范围内。

于 2013-07-20T07:25:05.240 回答