为什么我的循环用于读入Vector <vector <string =“”>&gt;不工作? Linux C ++ </vector>

时间:2011-10-23 02:29:08

标签: c++ loops vector for-loop while-loop

我正在尝试读取只有一列的文件,并将其写入3列的终端。我决定将一列读入单独的vector<string>。然后将vector string放入一个vector<vector <string> >,然后再写到终端。

我知道这应该是一个公寓里的家务的名单,因此我知道我可以通过读取15行来分割文件,然后我开始阅读另一个向量。但是,经理可以更改职务/家务的数量,因此我不知道我需要多少vector<string>,所以我不能只有vector<strings>预设的数量Duty1 P1 P1 P1 ... Duty2 P2 P2 P2 ... Duty3 P3 P3 P3 ... * 声明。

.dat文件的格式为

Duty1   Duty2   Duty3
P1      P2      P3
P1      P2      P3
P1      P2      P3

这就是我希望它看起来像

Duty1      Duty1     Duty1
    P1        P1        P1
    P1        P1        P1
    P1        P1        P1

这就是现在的样子

void DutyManagement::importFlatDuties(){

        ifstream fin1(dutyFile.c_str());

        if( !fin1 ){                                        
            cout << "Unable to find file: " << dutyFile<<endl;
            exit(1);
        }

        else{

            vector <string> temptVec;
            string tempString;

            flatDutyRoster.clear();                                 

            while(true){

                for (int i=0; i<14; i++){
                fin1 >> tempString;                                     

                   if (tempString == "*"){
                    fin1.close();
                    return;
                   }

                   temptVec.push_back(tempString);                          
                  }

                flatDutyRoster.push_back(temptVec);             
             }              
        }           
}

我想知道是否有人可以帮助我发现我的错误

以下是我导入文件的代码。

void DutyManagement::displayDuty(){
    importFlatDuties();

    for (int i=0; i<14; i++){
        for (int j=0; j<flatDutyRoster.size(); j++){
            if (i == 0){
                cout<<setw(10)<<"Duty "<<j+1<<": "<<setw(10)<<flatDutyRoster[j].at(i);
            }
            else{
                cout<<setw(23)<<flatDutyRoster[j].at(i);    
            }
        }
        cout<<endl;
    }
}

以下是我将其显示到终端的代码

{{1}}

我几乎可以肯定这只是一个错字,但经过多次仔细梳理,我无法发现它。这是我第一次尝试使用矢量内的矢量。也许我想念一些东西?我不知道

非常感谢任何帮助。要么你知道什么是错的,要么你有更好的方法来实现相同的结果。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您需要在某个地方拨打temptVec.clear()