int 和布尔值之间的不一致
Inconsistency between int and bool
我只是在 c++ 中实现了广度优先搜索,而不是将向量声明为 bool
,而是将其声明为 int
。这导致了一个非常奇怪的观察。当我使用 int
时,代码打印了以下内容:
1
32763
-524268732
在整个代码中,我没有为变量提供任何这样的值,因为第二个和第 3 个节点接收,所以我假设它们只是垃圾值,但是当我初始化向量时,为什么垃圾值甚至会出现,当我初始化向量以充满零时???您可以检查代码如下:
#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 实现完全有效只是偶然的......那么,真相是什么,所以?我的(可能的)错误是什么?
您在此处越界访问向量:
graph[3].push_back(1);
此时此刻,graph
只有三个要素。这会导致未定义的行为。
相关文章:
- 填充上编译器生成的复制构造函数之间的不一致
- boost::regex 和std::regex之间的不一致?
- 函数模板和函数之间奇怪的不一致"normal"
- Visual C++ 和 gcc 之间从 std::isblank 返回不一致.哪一个错了
- By-ref 参数:这是 std::thread 和 std::bind 之间的不一致吗?
- boost::p osix_time::time_facet 和 boost::p osix_time::time_input_facet 之间的'%f'行为不一致
- 编译器之间在丢弃的 if constexpr(false) 语句中实例化模板的行为不一致
- GCC和MSVC之间的文件输出不一致
- GCC和Clang之间的C 不一致
- boost::regex和std::regex之间的不一致
- std0x 和非 std0x 之间的 rcpp 不一致
- opencvmatchTemplate在计算机之间给出不一致的结果
- 在两个线程之间传递数据时,时间不一致
- 声明和定义之间常量限定符的使用不一致
- 为什么我看到两个blowfish实现之间不一致
- 为什么未命名的参数警告在C和C++之间不一致
- std::push_back和insert(end(),x)之间的矢量不一致崩溃
- 为什么不同程序执行之间的哈希值不一致
- int 和布尔值之间的不一致
- 两个语句执行之间的时间差不一致