2014-09-07 2 views
-2

В первом утверждении it де-ссылка на 0, поскольку элемент 1 в векторе равен 0. В моем втором операторе if я хотел бы увеличить значение it перед его ссылкой.Операция de-reference in if

int function(vector<int>& vec){ 
    for (auto it = vec.begin() + 1; it != vec.end(); ++it){ 
     if (*it == 0) 
     { 
      cout << "element 1 = 0" << endl; 
      if (*(it +1) && *(it +2) == 0) 
       cout << "element 2 and 3 = 0"; 
      return 0; 
     } 
    } 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    vector<int>grid = { 0, 0, 0, 0, 5, 2, 2, 2, 2 }; 
    function(grid); 

Выход:

элемент 1 = 0

Цель Выход:

element 1 = 0 
element 2 and 3 = 0 
+1

Непонятно, что вы просите. –

+0

Извините, я отредактировал мой вопрос. – mrmike

ответ

3

Если вы хотите проверить, что оба элемента равны нулю, что вам нужно для использования:

if (*(it +1) == 0 && *(it +2) == 0) 

вместо:

if (*(it +1) && *(it +2) == 0) 

Там нет никаких проблем с увеличивающимися или разыменований итераторов, потому что итераторы vector «s являются произвольным доступом, что позволяет приращение их it + n.

В вашем коде также есть проблема, что приращение итераторов может пройти мимо последнего элемента, что приведет к неопределенному поведению.

+0

Спасибо, ошибка новичка. – mrmike