Nếu tôi không nhầm, tôi có thể thực std::transform
hiện tại chỗ bằng cách sử dụng cùng một phạm vi như một trình vòng lặp đầu vào và đầu ra. Giả sử tôi có một số std::vector
đối tượng vec
, sau đó tôi sẽ viết
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
sử dụng một hoạt động đơn nguyên phù hợp unary_op
.
Sử dụng tiêu chuẩn C ++ 17, tôi muốn thực hiện chuyển đổi song song bằng cách dán một std::execution::par
trong đó làm đối số đầu tiên. Điều này sẽ làm cho hàm chuyển từ quá tải (1) sang (2) trong bài viết cppreference trênstd::transform
. Tuy nhiên, các ý kiến cho sự quá tải này nói:
unary_op
[...] không được làm mất hiệu lực bất kỳ trình lặp nào, kể cả các trình vòng lặp cuối hoặc sửa đổi bất kỳ thành phần nào của các phạm vi liên quan. (kể từ C ++ 11)
Có phải "sửa đổi bất kỳ yếu tố nào" thực sự có nghĩa là tôi không thể sử dụng thuật toán tại chỗ hay điều này đang nói về một chi tiết khác mà tôi giải thích sai?