2011-12-01 47 views
12

Tại sao sau chương trình không trở về giá trị tối thiểu là 1.std :: vector và std :: hành vi phút

#include <vector> 
#include <algorithm> 
#include <iostream> 

int main (int argc, char **argv) { 
    std::vector<int> test; 
    test.push_back(INT_MAX); 
    test.push_back(1); 

    int min = *(std::min(test.begin(), test.end())); 

    std::cout << "Minimum = " << min << std::endl; 
} 

Nó trả minimum giá trị như 2147483647

Trả lời

44

Bạn có thể thử này:

int min = *std::min_element(test.begin(), test.end()); 

std::min

Trả về số ít hơn của hai đối số Trả về số thấp hơn của a và b. Nếu cả hai đều tương đương, a được trả về.

std::min_element

Trả về một iterator trỏ đến phần tử có giá trị nhỏ nhất trong khoảng [đầu tiên, cuối cùng). Việc so sánh được thực hiện bằng cách sử dụng toán tử < cho phiên bản đầu tiên hoặc comp cho lần thứ hai; Một phần tử là phần tử nhỏ nhất nếu không có phần tử nào khác so sánh với phần tử nhỏ hơn (mặc dù nó có thể so sánh bằng nhau).

+2

Ah, điều này gần như chắc chắn là điều anh ta muốn. – GManNickG

+0

Giá trị trả về từ 'std :: min_element()' là một trình lặp nên nó cần được tham chiếu. – hmjd

+0

@hmjd Có bạn nói đúng. – FailedDev

-1

Lưu ý rằng std::vector<T>::end() KHÔNG cung cấp cho bạn trình lặp cho phần tử cuối cùng. Nó trả về một iterator trỏ BEHIND thành phần cuối cùng.
Nếu bạn muốn giải quyết phần tử đầu tiên và cuối cùng với logic lặp, bạn cần sử dụng (test.begin(), test.end()-1).

+0

Đây là thông tin hữu ích, nhưng không phải là câu trả lời cho câu hỏi. Nên có một bình luận. –

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