gpt4 book ai didi

c++ - int和bool不一致

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:57 25 4
gpt4 key购买 nike

我刚刚在 C++ 中实现了广度优先搜索,我没有将 vector 声明为 bool,而是将其声明为 int。这导致了一个非常奇怪的观察。当我使用 int 时,代码打印如下:

1
32763
-524268732

在整个代码中,我没有为第二和第三节点接收的变量提供任何这样的值,所以我假设它们只是垃圾值,但为什么在我初始化时甚至会出现垃圾值 vector 充满零???您可以检查代码如下:

#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 。

之前:

vector<int> flag(3, 0);

之后:

vector<bool> flag(3, false);

瞧!代码开始工作:

1 //The new output
1
1

所以,我的问题是,代码首先有什么问题?我相信这可能是我犯的某种错误,或者我的 bfs 实现完全可以正常工作可能只是偶然......那么,真相是什么?我的(可能的)错误是什么?

最佳答案

您正在越界访问您的 vector :

graph[3].push_back(1);

此时,graph 只有三个元素。这会导致未定义的行为

关于c++ - int和bool不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com