gpt4 book ai didi

带有 vector 的 C++ IF 评估操作数

转载 作者:行者123 更新时间:2023-11-28 04:31:03 26 4
gpt4 key购买 nike

我知道操作数的评估是从左到右进行的,对于 "&&" 操作数,如果左侧为假,则不应评估右侧!但是对于带有vector的这行代码,它不是这样工作的,

假设 left =1 且 v.size = 1;所以我们没有 v[1]。因为vector中只有v[0]

if ((left <= (v.size() -1 )) && ( v[node].Value > v[left].Value))
{
TempMin = left;
}

所以我希望正确的操作数不会被评估,但它给了我“超出范围的错误”。有什么想法吗??

已编辑

v.size()为1且v.size()-1 =0。

我更改了代码并找到了问题,我认为 VISUAL STUDIO 运行时调试器有问题。因为当我只是运行代码时,一切都很好,但是当我逐行调试代码时,IF 语句无法正常工作

    if (left <= v.size() -1 ) // first if
if (v[node].Value > v[left].Value) // right
TempMin = left;

在这种情况下,第一个 if PASS 并且出现错误,但如果我将其更改为

        if (left < v.size() ) // first if

or
int t = v.size() - 1;
if (left < t )

一切正常。所以似乎 (v.size() -1 ) 有问题!!

最佳答案

可能出现的问题:

  1. v.size() = 0

然后v.size() - 1size_t等于18446744073709551615 (2^64 - 1)。所以left <= 18446744073709551615然后你超出了范围。

解决方法: left + 1 <= v.size()left < v.size()而不是 left <= v.size() - 1

  1. v[node]让你超出范围。

解决方法:添加检查 node

关于带有 vector 的 C++ IF 评估操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52899303/

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