[英]Error: Vector subscript out of range 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;
}
您正在復制城市。
在vector1.push_back(HongKong);
不是將原始城市添加到vector1中,而是一個副本。
之后,執行HongKong.neighbor1.push_back( NewDelhi);
僅適用於原始文件,不適用於vector
的副本。
因此,當您在NewYork.shortPath( vector1 );
使用vector1時NewYork.shortPath( vector1 );
它不包含鄰居。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.