Почему мои циклы для чтения в Vector <vector <string>> не работают? Linux C ++ - PullRequest
0 голосов
/ 23 октября 2011

Я пытаюсь прочитать файл, в котором есть только один столбец, и записать его на терминал в 3 столбца.Я решил прочитать один столбец в отдельный vector<string>.Затем поместите vector string в одну vector<vector <string> >, прежде чем записывать в терминал.

Я знаю, что это должен быть список дел по дому, поэтому я знаю, что могу разбить файл, прочитав 15строки, прежде чем я начну читать в другой вектор.Тем не менее, количество обязанностей / обязанностей может быть изменено менеджером, поэтому я не знаю, сколько vector<string> мне понадобится, поэтому я не могу просто иметь заранее установленное число vector<strings>.

Файл .dat имеет вид

Duty1
P1
P1
P1
...

Duty2
P2
P2
P2
...

Duty3
P3
P3
P3
...
*

Вот как я хочу, чтобы он выглядел

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 Ответ

0 голосов
/ 23 октября 2011

Вам нужно позвонить temptVec.clear() куда-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...