2016-11-08 2 views
-1

Я не понимаю, почему второй> родитель показывает мне все время 2. Вектора содержитfind_if странные значения

{{2,4,0},{2,5,0},{2,6,0},{1,2,0},{8,7,0},{7,3,0},{10,9,0},{11,9,0},{3,9,0}, {1,3,0}, {0,1,11}} 

В VS 2013 я получил ошибку в течение по Ideone она работает , но пилит меня все время второго> родитель = 2.

struct tester { 
    int parent, number, child; 
}; 

std::vector <tester> test; 
test.push_back({ 0,1, 11 }); 
std::vector <tester>::iterator first, second; 

for (first = test.begin() + 1, second = test.begin(); first != test.end(); ++first) { 

    if (first->parent <= second->parent) { 
     parent = first->parent; 

     auto pred = [parent](pracownik& item) { 
      return item.parent == parent; 
     }; 

     second = std::find_if(first - 1, test.begin(), pred); 

     first->child = first - second; 

     if (first->child == 1) first->child = 0; 
     second = first; 
    } 

} 

программа должна изменить вектор на:

{ {2,4,0},{2,5,0},{2,6,0},{1,2,3},{8,7,0},{7,3,1},{10,9,0},{11,9,0},{3,9,2}, {1,3,5}, {0,1,11}} 
+0

Вы должны прочитать [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). Лучше, если вы представите пример, который можно запустить сам по себе. Без этого трудно понять вашу проблему. –

ответ

1

std::find_if(InputIterator f, InputIterator l, UnaryPredicate pred) выполняет поиск в диапазоне [f, l). В вашем случае std::find_if(first - 1, test.begin(), pred); ожидается, что first - 1 <= test.begin(), но это правда только на первой итерации вашего цикла for.

+0

Другими словами, он, вероятно, должен был написать 'std :: find_if (first -1, test.end(), pred)' –

Смежные вопросы