Tôi tự hỏi lý do đằng sau việc thực hiện std::list<>::splice
là gì để làm mất hiệu lực các trình vòng lặp tham chiếu đến chuỗi được ghép nối vào vùng chứa mới. Điều này có vẻ phi lý với tôi, đặc biệt là trong tiêu chuẩn của thông số kỹ thuật tiêu chuẩn std::container::swap
. Theo tiêu chuẩn ngôn ngữ std::container::swap
không làm mất hiệu lực bất kỳ trình lặp nào. Đây là một đặc tả thực tế hợp lý hoàn hảo. Tuy nhiên, tôi muốn nói rằng std::list<>::splice
cũng sẽ được hưởng lợi rất nhiều từ hành vi bảo quản vòng lặp.std :: list <> :: splice invalidates iterators. Lý do?
Tôi hiểu rằng có thể có một số cân nhắc học tập hoàn toàn dựa trên khái niệm về khả năng truy cập của trình vòng lặp, v.v. Nhưng đồng thời splice
là hoạt động cụ thể, có nghĩa là cung cấp đặc điểm kỹ thuật tùy chỉnh cho nó gây thiệt hại nghiêm trọng về khái niệm cho thiết kế STL nói chung.
Vậy đó là gì? Nó có cấm hay không tuân thủ một số triển khai thực tế của std::list
, mà tôi không nhận ra?
bản sao có thể có của [splice() trên std :: list and iterator invalidation] (http://stackoverflow.com/questions/143156/splice-on-stdlist-and-iterator-invalidation) – jwismar