#c #function #visual-studio-code #graph-theory #vscode-debugger
#c #функция #visual-studio-code #теория графов #vscode-debugger
Вопрос:
Я пытаюсь отладить графическую функцию, которая начинается с одной вершины и заканчивается в конечной вершине после ее нахождения с помощью алгоритма FS (First Search). При вызове функции в режиме отладки отладчик открывает stl_map.h (я предполагаю, что это происходит потому, что граф (вершины и ребра) были реализованы в map.
Параметрами функции являются (map, startPerson, endPerson). Я передаю карту и два параметра people следующим образом (имя функции — bfsFacebook):
for (;;) {
cout << endl << "Enter the name of the starting person:n";
getline(cin, startingPerson);
if (IS_QUIT(startingPerson))
break;
if (everyone.count(startingPerson) == 0) {
cout << "Invalid starting name.";
continue;
}
cout << endl << "Enter the name of the ending person:n";
getline(cin, endingPerson);
if (IS_QUIT(endingPerson))
break;
if (everyone.count(endingPerson) == 0) {
cout << "Invalid ending name.";
continue;
}
//Breath-First search from starting node to end node (starting vertext to end vertex)
if (bfsFacebook(everyone, everyone[startingPerson], everyone[endingPerson]) == true) {
cout << "Path found between " << startingPerson << " and " << endingPerson << endl;
} else {
cout << "Path Not Found between " << startingPerson << " and " << endingPerson << endl;
}
}
cout << "Exiting..." << endl;
Вот фактическая функция:
bool bfsFacebook(map<string, Person> everyone, Person amp;startingPerson, Person amp;endingPerson) {
startingPerson.visited = true;
if (startingPerson.name == endingPerson.name amp;amp; startingPerson.visited == true)
return true;
for (string somePerson : startingPerson.friends) {
if (everyone[somePerson].visited == false amp;amp; bfsFacebook(everyone, everyone[somePerson], endingPerson)) {
return true;
}
}
return false;
}
Есть ли какая-либо конкретная причина, по которой переход в функцию во время отладки не отправляет меня к фактической функции?
Если мой вопрос недостаточно подробный, пожалуйста, дайте мне знать.
Ответ №1:
Строка вызова:
bfsFacebook(everyone, everyone[startingPerson], everyone[endingPerson])
Начинается с разрешения аргументов перед bfsFacebook
их вызовом.
У вас есть два вызова map<string, Person>::operator[](const stringamp;)
, которые должны быть выполнены для разрешения everyone[startingPerson]
и everyone[endingPerson]
, поэтому следующая выполняемая строка в вашей программе находится в std::map
map<Key, Value>::operator[](const Keyamp;)
Может быть оптимизирован в зависимости от сборки, но при отладке он, скорее всего, присутствует в коде.
Поскольку std::map
экземпляр был создан для <string, Person>
вашего собственного кода, у отладчика нет причин не вводить функцию, существование которой является вашей ответственностью.