2013-05-25 4 views
0

나는 누군가 이걸로 나를 도울 수 있기를 바랍니다.오류 : 범위 밖의 벡터 아래 첨자 C++

이 프로그램을 수정하려고했지만 다른 것을 알지 못합니다. 나는이 오류를 벡터의 첨자가 범위를 벗어나지 못하게하고있다. 그러나 push_back을 사용하여 "main"에서 생성 된 각 변수에 객체를 추가 했으므로 문제가 무엇인지 알 수 없습니다.

문제는 9 개 도시로 구성된 일종의 그래프입니다. 각 도시는 하나의 도시와 직접 연결됩니다. "shortpath"함수를 사용하여 각 도시의 부모를 previous1 멤버에 추가합니다.

그러나 프로그램을 실행하면 메인의 push_backed에도 불구하고 도시의 변수 "neighbor1"의 크기가 0이라고 계속 알려줍니다.

#include<iostream> 
#include<vector> 
#include<queue> 
#include<string> 


using namespace std; 

class City 
{ 
public: 

City(); 
City(string city); 
string cityName; 
int cityDistance; 
vector<City> neighbor1; 
bool visited1; 
vector<City> previous1; 
void addNeighbor(City c); 
void shortPath(vector<City> cities); 
void printPath(City final); 

}; 

헤더 파일의 구현 :

#include<iostream> 
#include<vector> 
#include<queue> 
#include<string> 


using namespace std; 
#include"City.h" 



City::City() 
{ 
cityDistance = -1; 
cityName = " "; 
visited1 = false; 

} 
City::City(string city) 
{ 
cityDistance = -1; 
cityName = city; 
visited1 = false; 


} 

void City::addNeighbor(City c) 
{ 
neighbor1.push_back(c); 
} 

void City::shortPath(vector<City> cities) 
{ 
queue<City*> q; 
q.push(this); 

for(unsigned int i = 0; i < cities.size(); i++) 
{ 
    cities[i].cityDistance = -1; 
    cities[i].visited1 = false; 

} 

q.front()->visited1 = true; 

q.front()->cityDistance = 0; 

while(!q.empty()) 
{ 
    City * v = q.front(); 

    if(v->neighbor1.size() != 0) 
    { 

     for(unsigned int i = 0; i < v->neighbor1.size(); i++) 
     { 
      City * z = &v->neighbor1[i]; 
      q.push(z); 
      if(z->visited1 == false) 
      { 
       v->neighbor1[i].cityDistance = v->cityDistance + 1; 
       v->neighbor1[i].previous1.push_back(*v); 
       v->neighbor1[i].visited1 = true; 
      } 
     } 


    } 

    q.pop(); 

} 




} 





void City::printPath(City final) 
{ 
if(final.previous1.size() != 0) 
{ 
    cout << final.previous1[0].cityName << endl; 
} 
else 
{ 
    cout << "No previous for final" << endl; 
} 

} 

이 메인입니다 : 당신은 도시를 복사

#include<iostream> 
#include<vector> 
#include<queue> 
#include<string> 


using namespace std; 
#include"City.h" 

int main() 
{ 


City NewDelhi = City("New Delhi"); 
City HongKong = City("Hong Kong"); 
City Washington = City("Washington"); 
City Dublin = City("Dublin"); 
City Lisbon = City("Lisbon"); 
City Vienna = City("Vienna"); 
City Santiago = City("Santiago"); 
City RioDeJaneiro = City("RioDeJaneiro"); 
City Berlin = City("Berlin"); 
City NewYork = City("NewYork"); 


vector<City> vector1; 

vector1.push_back(HongKong); 
vector1.push_back(NewDelhi); 
vector1.push_back(Washington); 
vector1.push_back(Dublin); 
vector1.push_back(Lisbon); 
vector1.push_back(Vienna); 
vector1.push_back(Santiago); 
vector1.push_back(RioDeJaneiro); 
vector1.push_back(Berlin); 
vector1.push_back(NewYork); 



HongKong.neighbor1.push_back(NewDelhi); 
NewDelhi.neighbor1.push_back(Washington); 
Washington.neighbor1.push_back(Dublin); 
Dublin.neighbor1.push_back(Lisbon); 
Lisbon.neighbor1.push_back(Vienna); 
Vienna.neighbor1.push_back(Santiago); 
Santiago.neighbor1.push_back(RioDeJaneiro); 
RioDeJaneiro.neighbor1.push_back(Berlin); 
Berlin.neighbor1.push_back(NewYork); 
NewYork.neighbor1.push_back(HongKong); 




NewYork.shortPath(vector1); 

HongKong.printPath(NewYork); 







system("PAUSE"); 
return 0; 
} 
+0

왜 'addNeighbor' 함수를 만들고 주에서 사용하지 않습니까? 이것이 문제인지는 모르겠지만'HongKong.addNeighbor (NewDelhi)' –

+0

과 같이하려고하면 오류를 자세히 기록하고 오류를 복사하십시오. 또한 컴파일러 오류 또는 런타임 오류 – ahmedsafan86

답변

1

.

vector1.push_back(HongKong);에는 원래 City가 vector1에 추가되지 않지만 사본이 추가됩니다.

그런 다음 vector의 복사본이 아니라 원본에서만 작동하는 HongKong.neighbor1.push_back(NewDelhi);을 수행합니다.

NewYork.shortPath(vector1);에서 vector1을 사용할 때 이웃 벡터가 사용되지 않습니다.

+0

경우 알려주 귀하의 답변 주셔서 감사합니다. Sjoerd 감사합니다. 네가 한 말을 이해했다. 이제 나는 그것을 고치려고 노력했다 : – user2419831