C++ 读取文本文件并打印内容c++;

C++ 读取文本文件并打印内容c++;,c++,constructor,text-files,C++,Constructor,Text Files,我被告知尽可能少地读/写光盘。对于这个解决方案,我创建了一个构造函数,它在对象构造时读取文件,并用文件的内容填充无序的映射。这是读取.txt文件的好方法/实践吗 在打印文件内容方面,我再次提到了readFile。这样可以吗?如果不让它全球化,我真的找不到另一种方法。代码如下: class Test { private: string name; string number; unordered_map<string, string> mappy; public

我被告知尽可能少地读/写光盘。对于这个解决方案,我创建了一个构造函数,它在对象构造时读取文件,并用文件的内容填充无序的映射。这是读取.txt文件的好方法/实践吗

在打印文件内容方面,我再次提到了readFile。这样可以吗?如果不让它全球化,我真的找不到另一种方法。代码如下:

class Test {
private:
    string name;
    string number;
    unordered_map<string, string> mappy;
public:

Test()
{
    ifstream readFile("A:\\Coding\\namesNumbers.txt");

    while (readFile >> name >> number)
    {
        mappy[name] = number;
    }
}

void print()
{
    ifstream readFile("A:\\Coding\\namesNumbers.txt");

    while (readFile >> name >> number)
    {
        for (int i = 0; i < 1; i++)
        {
            cout << name << ":" << " ";
            cout << number << endl;
        }
    }
}

~Test() {};

};
类测试{
私人:
字符串名;
字符串编号;
无序的地图映射;
公众:
测试()
{
ifstream读取文件(“A:\\Coding\\namesNumbers.txt”);
while(读取文件>>名称>>编号)
{
mappy[name]=编号;
}
}
作废打印()
{
ifstream读取文件(“A:\\Coding\\namesNumbers.txt”);
while(读取文件>>名称>>编号)
{
对于(int i=0;i<1;i++)
{

cout您正在读取文件两次。如果您不介意项目的顺序,那么您也可以从“mappy”打印

请注意,最好尽可能在本地声明“name”和“number”

(考虑为'number'i.s.o.'string'使用另一种数据类型。)

在下面的代码中,我假设您有C++17(用于结构化绑定)

类测试{
私人:
无序的地图映射;
公众:
测试()
{
ifstream读取文件(“A:\\Coding\\namesNumbers.txt”);
字符串名;
字符串编号;
while(读取文件>>名称>>编号)
{
mappy[name]=编号;
}
}
作废打印()
{
用于(自动[名称,编号]:mappy)
{

既然你已经在构造函数中读取了文件内容,那么在打印例程中再次读取它们又有什么意义呢?打印出你之前读到的内容。如果问题只是在构造函数中读取文件是否是一种好的做法,那么答案是这取决于上下文。这是一个设计决策,没有任何上下文,我不能说whet她知道是好是坏。
名称
/
数字
应该是局部变量。为什么要对(int i=0;i<1;i++)执行此“循环”
(只运行一次).你做了一个有效的点Jarod42。我只是在没有循环的情况下打印了它,它也做了同样的事情。谢谢你的回复!名称和数字没有定义。我想这是因为我们在函数中声明了变量。
class Test {
private:
    unordered_map<string, string> mappy;
public:

    Test()
    {
        ifstream readFile("A:\\Coding\\namesNumbers.txt");
        string name;
        string number;
        while (readFile >> name >> number)
        {
            mappy[name] = number;
        }
    }

    void print()
    {
        for (auto [name, number] : mappy)
        {
            cout << name << ":" << " ";
            cout << number << endl;
        }
    }

    ~Test() {};

};