C++ for循环中的索引向量

C++ for循环中的索引向量,c++,vector,indexing,dijkstra,C++,Vector,Indexing,Dijkstra,这是一个后续行动,只是现在有更多的进展和更少的错误 就像上次一样,这是一门大学课程,所以复制粘贴对我来说并不是最有益的,即使它确实有效 我现在遇到的问题与LeastDistance函数中向量的索引有关,因为在调试器内外运行代码时会生成运行时异常,并显示向量下标超出范围的消息。如果有人比我更熟悉向量库,那么相关的行是1804。在同一函数中访问for循环时会触发此操作 for (int j = 0; j < hnode[i].nodes.size(); j++) for(int j=0;j

这是一个后续行动,只是现在有更多的进展和更少的错误

就像上次一样,这是一门大学课程,所以复制粘贴对我来说并不是最有益的,即使它确实有效

我现在遇到的问题与LeastDistance函数中向量的索引有关,因为在调试器内外运行代码时会生成运行时异常,并显示向量下标超出范围的消息。如果有人比我更熟悉向量库,那么相关的行是1804。在同一函数中访问for循环时会触发此操作

for (int j = 0; j < hnode[i].nodes.size(); j++)
for(int j=0;j
到目前为止,我已经编写了一个小的助手函数GetIndex,但是我不确定它的代码是否正确,以及如何在LeastDistance函数本身中实现它。下面是完整的代码(为粗制滥造的格式道歉,这里的编辑让我有些难过)

#包括“stdafx.h”
#包括
#包括
#定义INF=9999;
使用名称空间std;
结构体类型
{
char nodeLink;//相邻链路
int cost;//链接的成本
};                  //在Dijkstra算法中使用
类头节点
{
公众:
字符名;
布尔访问;
向量节点;
头节点(char x){Name=x;visted=false;}
};
类图
{
char Start='A';
char StartNode;
字符当前节点;
目的地;
整数总成本=0;
向量hnode;
向量路径;
向量权重;
公众:
图();
void createHeadNode(char X);
void createAdjMatrix();
char-LeastDistance(char节点);
无效矩阵();
void Dijkstra(char StartNode,char Destination);
void DestinationChangeCaller();
char GetStartNode();
int GetIndex(charcurrentnode);
};
int main()
{
图形;
graph.createHeadNode('A');
graph.createHeadNode('B');
graph.createHeadNode('C');
graph.createHeadNode('D');
graph.createHeadNode('E');
graph.createAdjMatrix();
graph.GetStartNode();
graph.DestinationChangeCaller();
系统(“暂停”);
返回0;
}
void图形::DestinationChangeCaller()
{
for(Destination='A';Destination-get;

cout可能还有其他问题,但这里有一个:

char Graph::GetStartNode() // elementary get function with no error correction.
{
    char got;
    cout << "Please enter a node from A-E to start from:  ";
    cin >> got;
    cout << endl;
    return got;
}
因此,这里:

void Graph::DestinationChangeCaller()
{
    for (Destination = 'A'; Destination <= 'E'; Destination++)
    {
        Dijkstra(StartNode, Destination);
                 ^^^^^^^^^
    }
}
void图::DestinationChangeCaller()
{

对于(Destination='A';Destination,您有多个以
开头的循环(int j=0;j
。它是哪一个?请阅读有关
graph.createAdjMatrix();
graph.GetStartNode();    // <----- The return value isn't used
graph.DestinationChangeCaller();
void Graph::DestinationChangeCaller()
{
    for (Destination = 'A'; Destination <= 'E'; Destination++)
    {
        Dijkstra(StartNode, Destination);
                 ^^^^^^^^^
    }
}