2015-10-24 54 views
0

该程序应该打开.csv文件并将数据输入到矢量中。后来我应该实现一个优先队列。但是,当我尝试运行它时遇到此错误。C++矢量下标超出范围错误

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <vector> 
#include "Prisoner.h" 
#include "Jailed.h" 
using namespace std; 

int main() 
{ 

string line, ID, sentenceIn, servedIn, lastName, firstName; 
int sentence, served; 

vector<string> idNum; 
vector<int> sentenceLen; 
vector<int> servedTime; 
vector<string> lastNameIn; 
vector<string> firstNameIn; 


ifstream data("prisoner_data.csv"); 

if (!data.is_open()) 
{ 
    exit(EXIT_FAILURE); 
} 

while (getline(data, line)) 
{ 

    getline(data, ID, ','); 
    cout << ID << " "; 
    idNum.push_back(ID); 

    getline(data, sentenceIn, ','); 
    cout << sentenceIn << " "; 
    istringstream(sentenceIn) >> sentence; 
    sentenceLen.push_back(sentence); 


    getline(data, servedIn, ','); 
    cout << servedIn << " "; 
    istringstream(servedIn) >> served; 
    servedTime.push_back(served); 


    getline(data, lastName, ','); 
    lastNameIn.push_back(lastName); 
    cout << lastName << " "; 

    getline(data, firstName, ','); 
    firstNameIn.push_back(firstName); 
    cout << firstName << " "; 
} 
Prisoner p[100]; // Initializing Prisoner class 

for (int i = 0; i <= idNum.size(); i++) 
{ 
    p[i].setIdNum(idNum[i]); 
    p[i].setSentence(sentenceLen[i]); 
    p[i].setTimeServed(servedTime[i]); 
    p[i].setLastName(lastNameIn[i]); 
    p[i].setFirstName(firstNameIn[i]); 
} 

data.close(); 
system("pause"); 
return 0; 

}

我还可以包括囚犯类,如果需要弄清楚的问题。

回答

2
for (int i = 0; i <= idNum.size(); i++) 

应该

for (int i = 0; i < idNum.size(); i++) 
+0

可能?当然。 – Barmar

+0

@Barmar目前还不清楚'idNum.size()'是如何与100相关的;)但我的猜测是它等于囚犯的数量。 – vsoftco

+0

'100'与它有什么关系?这个错误大概是关于'idNum [i]'而不是'p [i]'。 C++不会为普通数组进行边界检查,只有类似'vector' – Barmar