Параллельная политика гласит, что порядок оценки итератора не гарантируется. Тем не менее, std :: find*, std :: search и std :: mismatch все говорят, что они возвращают первое условие соответствия итератора. Как взаимодействуют эти два оператора?
Код: Выделить всё
std::vector v(10);
std::iota(v.begin(), v.end(), 0);
const auto odd = [](int i) { return i % 2; };
const auto it = std::find(v.begin(), v.end(), odd);
assert(*it == 1);
Наивное чтение документации позволило бы два потока обрабатывать куски [0, 4] и [5, 9] параллельно, а последняя возвращается сначала, что приводит к *it == 5 . Или все еще считается, что для нескольких совпадений самые ранние возвращаются? Я не смог найти какую -либо соответствующую цитату о CPPReerference для , или каких -либо их подпажков. Как этот вопрос о изменении основного контейнера во время выполнения алгоритма.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... ecutionpar