带向量的C ++ IF评估操作数

时间:2018-10-19 20:12:42

标签: c++ if-statement operands

我知道操作数的评估是从左到右,对于 “ &&” 操作数,如果左侧为假,则不应评估右侧!但是对于具有 vector 的这一行代码,它无法像这样工作,

假设left = 1且v.size = 1;因此我们没有v [1]。因为向量中只有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;

在这种情况下,如果PASS出现错误,但我将其更改为

,则是第一个错误
        if (left < v.size() ) // first if

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

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

1 个答案:

答案 0 :(得分:1)

可能的问题:

  1. <div class="container-fluid main" style="border:10px solid red;"> <p> I need the 'Websites' and 'Development' in the center of the column. At the moment .text-center doesn't work <div style="border:10px solid purple;width:80%;margin:15% auto "> <div class="content row"> <div class="col text-center" style="border:10px solid black;"> <h1>Websites</h1> <h1>Development</h1> </div> </div> </div> </div>

然后h1v.size() = 0,等于v.size() - 1size_t)。因此18446744073709551615会超出范围。

解决方案: 2^64 - 1left <= 18446744073709551615而非left + 1 <= v.size()

  1. left < v.size()使您超出了范围。

解决方案: 添加left <= v.size() - 1

的支票