2015-01-01 2 views
0

Я только что реализовал широкий поиск в C++ и вместо объявления вектора как bool, я объявил его как int. Это приводит к очень странному наблюдению. Когда я int код печатается следующее:Непоследовательность между int и bool

1 
32763 
-524268732 

на протяжении всего кода, я не обеспечивают такого значения для переменной, как второй и третий узел приема, поэтому я предполагаю, что они просто ценности мусора , но почему значения мусора даже появляются, когда я инициализирую вектор, чтобы он был заполнен нулями ??? Вы можете проверить код, чтобы быть, что ниже:

#include <iostream> 
#include <queue> 
using namespace std; 

queue<int> neigh; 
vector< vector<int> > graph(3); 
vector<int> flag(3, 0); 

int main(void) 
{ 
    graph[0].push_back(1); graph[0].push_back(2); 
    graph[1].push_back(0); graph[1].push_back(2); 
    graph[2].push_back(0); graph[3].push_back(1); 
    neigh.push(0); 
    while(!neigh.empty()) 
    { 

     int cur = neigh.front(); 
     neigh.pop(); 
     flag[cur] = 1; 

     for(int i = 0, l = graph[cur].size();i < l;i++) 
     { 
      if(!flag[graph[cur][i]]) 
       neigh.push(graph[cur][i]); 
     } 
    } 
    for(int i = 0;i < 3;i++) 
    { 
     cout << flag[i] << endl; 
    } 
} 

Хорошо, тогда я изменил только одну строку кода, номер строки 7, тот, где я заявляю и инициализацию flag вектор.

До:

vector<int> flag(3, 0); 

После:

vector<bool> flag(3, false); 

И вуаля! Код начал работать:

1 //The new output 
1 
1 

Итак, вопрос в том, в чем проблема с кодом в первую очередь? Я верю, что это может быть какая-то ошибка, которую я сделал, или, возможно, что она только случайно, что моя реализация bfs работает вообще ... Итак, что такое правда, ТАК? Какая моя (возможная) ошибка?

+0

Ну, это действительная ошибка, не так ли? Вы, парни с огромными репозиториями, думаете, что можете продолжать голосование по каждому вопросу, заданному новичком? –

+1

Обычно принято оставлять комментарий, объясняющий нижний предел. Я не вижу проблемы с этим вопросом, поэтому, в свою очередь, я поддержу его, чтобы вы отказались от необъяснимого нисходящего потока. :-) –

+0

Кроме того, могу ли я предложить ответ маркировки @ juanchopanza как принятый, если он решил вашу проблему? –

ответ

4

Вы обращаетесь свой вектор из границ здесь:

graph[3].push_back(1); 

В этот момент имеет только три элемента. Это приводит к неопределенным поведением.

+0

О ****, извините, мой плохой, мой настоящий плохой –

Смежные вопросы