2013-05-13 43 views
13

article at cppreference.com cho biết độ phức tạp của std::vector::shrink_to_fit là không đổi. Theo tôi biết, điều đó chỉ có thể xảy ra nếu các yếu tố không được di chuyển, bởi vì nếu chúng là độ phức tạp thì n. Nó cũng nói rằng Tất cả các trình vòng lặp, bao gồm cả trình vòng lặp kết thúc trong quá khứ, có khả năng bị vô hiệu. có nghĩa là việc di chuyển các phần tử là một khả năng được xác định rõ.C++ 11: std :: vector :: shrink_to_fit complexity

Bài viết có bị lỗi không? ... hay có ma thuật nào mà tôi không biết?

+1

(Bài viết đã được khắc phục nhanh chóng.) – Notinlist

Trả lời

16

Bài viết bị lỗi, tôi đã sửa nó.

Trong khi tiêu chuẩn chính thức không nói bất cứ điều gì về sự phức tạp của std::vector::shrink_to_fit, trong N3376 họ đã thay đổi từ ngữ, từ đó sửa chữa DR 2033:

23.3.6.3:

void shrink_to_fit();

Yêu cầu: T phải là MoveInsertable vào *this.

Độ phức tạp: Tuyến tính theo kích thước của chuỗi.

+0

Bạn có thể trích dẫn bản nháp - không có gì trong tiêu chuẩn C++ 11 về 'std :: vector :: shrink_to_fit() 'phức tạp. –

+0

@MichaelBurr: vâng, họ đã thay đổi nó trong N3376. – Fanael

+0

Tôi thấy - thú vị là họ không thêm từ ngữ cho 'basic_string <> :: shrink_to_fit()' (chưa?). –

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