在此页面上有这样一条注释:
std::transform 不保证对于 unary_op 或 binary_op 的应用顺序。
这是否意味着生成的序列顺序不保证与输入序列的顺序相关,或者,它是否意味着,虽然 transform 的最终结果的顺序是保证的,但是各个元素可能是无序创建的(尽管它们仍将按顺序出现)?
结果序列的顺序是固定的。具体地,标准规定:
作用: 通过范围
[result, result + (last1 - first1))
中的每个迭代器i
分配一个对应的新值,该新值等于op(*(first1 + (i - result)))
或binary_op(*(first1 + (i - result)), *(first2 + (i - result)))
。
这保证了结果范围的第一个元素是通过转换输入范围的第一个元素(或多个元素)获得的,以此类推。但是,调用 op
的顺序没有指定。