Tiêu chuẩn nói:
Một deque là một thùng chứa trình tự hỗ trợ các vòng lặp truy cập ngẫu nhiên (27.2.7). Ngoài ra, nó hỗ trợ các hoạt động chèn và xóa thời gian liên tục ở đầu hoặc cuối; chèn và xóa ở giữa mất thời gian tuyến tính.
Tuy nhiên, nó cũng nói trong Điều khoản tương tự:
Tất cả các yêu cầu phức tạp trong Điều khoản này chỉ được nêu dưới dạng số lượng hoạt động trên các đối tượng được chứa. [Ví dụ: Hàm tạo sao chép của loại
vector<vector<int>>
có độ phức tạp tuyến tính, mặc dù độ phức tạp của việc sao chép từng loại chứavector<int>
chính nó là tuyến tính. - ví dụ cuối]
Điều này không có nghĩa là việc chèn vào lúc bắt đầu, deque<int>
được cho phép mất thời gian tuyến tính miễn là nó không thực hiện nhiều hơn một số lượng hoạt động không đổi trên int
s đã có trong deque và int
đối tượng mới được chèn ?
Ví dụ: giả sử rằng chúng ta thực hiện một deque bằng cách sử dụng "vectơ kích thước-K". Dường như cứ sau mỗi lần K chèn vào đầu, một vectơ kích thước K mới phải được thêm vào lúc đầu, vì vậy tất cả các vectơ kích thước K khác phải được di chuyển. Điều này có nghĩa là độ phức tạp thời gian của phần chèn lúc đầu được khấu hao O (N / K) trong đó N là tổng số phần tử, nhưng K là hằng số, vì vậy đây chỉ là O (N). Nhưng dường như điều này được Tiêu chuẩn cho phép, bởi vì việc di chuyển một vectơ kích thước K không di chuyển bất kỳ phần tử nào của nó và "các yêu cầu phức tạp" chỉ "được nêu trong số lượng hoạt động" trên các int
đối tượng được chứa .
Tiêu chuẩn có thực sự cho phép điều này? Hoặc chúng ta nên giải thích nó là có một yêu cầu chặt chẽ hơn, tức là số lượng hoạt động không đổi trên các đối tượng được chứa cộng với thời gian bổ sung không đổi?
vector<vector<int>>
nhưng sau đó tuyến tính đối với các phần tử bên trong vector<int>
. Nếu bạn chỉ xem xét số lượng phần tử của vectơ ngoài hte, tôi sẽ coi việc sao chép vectơ bên trong là không đổi, mặc dù tôi có thể sai, nó đã trễ ở đây