Làm thế nào để chọn giữa std :: giảm và std :: tích lũy?


8

std::accumulatestd::reducelàm gần như điều tương tự.

Tóm tắt std::reducenói lên tất cả:

similar to `std::accumulate`, except out of order 

Trong nhiều trường hợp, các hàm này sẽ mang lại kết quả cuối cùng giống nhau và thể hiện cùng chức năng tổng thể. Rõ ràng là nếu bạn có một số tính toán tải rất nặng, v.v. bạn có thể thử nghiệm std::reduceđể liên kết. I E. sự khôn ngoan thông thường ở đây từ góc nhìn của loài chim - bạn có nên luôn luôn bám chặt vào std :: tích lũy trừ khi tối ưu hóa rõ ràng? hoặc chỉ nên mặc định để sử dụng std::reduce?

Nếu std::reduce(với mặc định / không có chính sách thực thi nào được chọn) luôn luôn ít nhất là nhanh như std::accumulate(lưu một vài hướng dẫn) thì tôi nghĩ chỉ nên sử dụng tích lũy khi đơn hàng nghiêm ngặt.

Câu trả lời:


7

Có, tôi sẽ luôn sử dụng std::reducetrừ khi bạn biết bạn cần bảo đảm theo thứ tự từ std::accumulate. Điều này cho phép trình biên dịch tự do hơn để tối ưu hóa, và trong trường hợp xấu nhất là giống hệt nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.