2015-12-08 4 views
7

На this page есть это примечание:СТД :: преобразование гарантии порядка

std::transform does not guarantee in-order application of unary_op or binary_op.

Означает ли это, что в результате порядок последовательности не гарантируется коррелируют с порядком последовательности ввода, или, означает ли это, что, хотя порядок конечного результата преобразования гарантирован, отдельные элементы могли быть созданы не по порядку (хотя они все равно появятся в порядке)?

+1

Родственные: http://stackoverflow.com/questions/17356719/why-stdtransform-doesnt-guarantee-the-order-but-for-each-guarantee- the-order – clcto

ответ

11

Порядок результирующей последовательности является фиксированным. В частности, стандарт говорит:

Эффекты: Назначает через каждый итератора i в диапазоне [result,result + (last1 - first1)) новое соответствующее значение равно op(*(first1 + (i - result)) или binary_op(*(first1 + (i - result)), *(first2 + (i - result))).

Это гарантирует, что первый элемент диапазона результатов будет получен путем преобразования первого элемента (ов) входного диапазона (диапазонов) и т. Д. Однако порядок, в котором сделаны звонки на номер op, не указан.

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