Я застрял на баге, который, кажется, исправляется выше моего уровня знаний.
Код представляет собой алгоритм для взлома задачи интервьюирования в области кодирования 04_07.В которой мы должны выяснить структуру зависимостей проектов.
В качестве структуры данных я использую вектор списков с целыми числами: vector<list<int>>
Доступ к элементам после нажатия - это нормально.Но когда я делаю это позже, я получаю ошибку сегментации в deps.at(i).push_back(-1)
.
Помощь очень ценится :) Я особенно не понимаю, так как я не использую никаких указателей или ручного управления памятью.
Вот полный код всей программы:
int projects = 6;
vector<list<int>> deps;
for(int i=1; i<=projects; i++)
{
list<int> l;
deps.push_back(l);
}
deps[4].push_back(1);
deps[2].push_back(6);
deps[4].push_back(2);
deps[1].push_back(6);
deps[3].push_back(4);
for(auto c: deps)
cout << c.back() << endl;
vector<int> buildOrder;
while(buildOrder.size() < projects)
{
for(int i = 1; i <= projects; i++)
{
if(deps[i].size() == 0)
{
buildOrder.push_back(i);
deps.at(i).push_back(-1);
for(int j=1; j <= projects; j++)
{
list<int>::iterator iter = find(deps[j].begin(), deps[j].end(), i);
if(iter != deps[j].end()) deps[j].erase(iter);
}
}
}
}
for(int p : buildOrder) cout << p << " ";
cout << endl;