2012-03-11 67 views
7

Tôi thường thấy bản thân mình viết các hàm giá trị lớn nhất tìm kiếm thông qua một mảng đôi, tôi sử dụng các chức năng như thế này để chuẩn hóa dữ liệu trước khi hiển thị đồ họa.Chức năng C++ để tìm giá trị tối đa trong một mảng tăng gấp đôi?

Có cách nào tốt hơn để tìm giá trị tối đa của một mảng tăng gấp đôi không? Có một chức năng tiêu chuẩn để tìm giá trị tối đa trong một mảng? Có một số nội tại cho hoạt động này? Tôi nhớ chỉ dẫn ASM chuyên môn tồn tại trong các chip DSP.

Trả lời

16

Đúng! Có một chức năng gọi là std::max_element:

double arr[LENGTH] = /* ... */ 
double max = *std::max_element(arr, arr + LENGTH); 

Bạn sẽ cần phải #include <algorithm> để làm điều này. Tiêu đề đó có một loạt các tính năng trong đó, và bạn nên dành thời gian để tìm hiểu thêm về các thư viện STL và các thuật toán, vì chúng có thể làm cho cuộc sống của bạn trở nên dễ dàng hơn nhiều.

Miễn là chúng tôi đang ở trên chủ đề, hãy cân nhắc xem xét std::vector hoặc std::array làm thay thế cho mảng C++ thô. Chúng an toàn hơn và dễ sử dụng hơn một chút.

Hy vọng điều này sẽ hữu ích!

+0

Tôi quá sợ hãi để thay thế chúng bằng std :: vectơ vì mã của tôi tự động vector hóa khá độc đáo. – Mikhail

+0

@Misha: Đừng sợ hãi, hãy thử và chạy một vài bài kiểm tra để đảm bảo rằng hiệu suất của bạn vẫn tốt. Nó không phải là một nỗi sợ hãi bất hợp lý. Chúng tôi đã giảm gần 20% hiệu suất trong một số phần quan trọng của mã (nhiều vòng lặp và dấu phẩy động) và chúng tôi đã theo dõi chuyển động từ VS 6 đến 2005. Họ đã kiểm tra vòng lặp và kiểm tra giới hạn (iirc) theo mặc định. –

Các vấn đề liên quan