Я знаю, что оценка операндов выполняется слева направо, а для операнда "&&" , если левый равен false, правый не должен оцениваться!но для этой строки кода с вектором это не работает так:
предположим, что 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) !!