Tôi đang lên kế hoạch triển khai danh sách Những điều trong C++ nơi các thành phần có thể bị xóa theo thứ tự. Tôi không mong đợi rằng tôi sẽ cần bất kỳ loại truy cập ngẫu nhiên nào (tôi chỉ cần quét danh sách theo định kỳ) và thứ tự các mục cũng không quan trọng.Tuổi thọ và tính hợp lệ của trình lặp C++ là gì?
Vì vậy, tôi nghĩ đến std::list<Thing*> with this->position = insert(lst.end(), thing)
nên thực hiện thủ thuật. Tôi muốn lớp Thing nhớ vị trí của từng trường hợp để sau này tôi có thể dễ dàng làm lst.erase(this->position)
trong thời gian không đổi.
Tuy nhiên, tôi vẫn còn hơi mới đối với vùng chứa C++ STL và tôi không biết liệu có an toàn để giữ các trình lặp trong một thời gian dài như vậy hay không. Đặc biệt, cho rằng sẽ có các yếu tố khác bị xóa trước và sau khi đưa Thing trước khi nó biến mất.
Câu trả lời hay, nó cũng sẽ giúp bạn biết lý do nào có thể khiến một véc tơ phân bổ lại. (chèn một phần tử là một phần tử rõ ràng, nhưng có những phần tử khác không?) – Malabarba
Bất kỳ sửa đổi nào của vectơ (cả việc chèn và loại bỏ) đều được phép tái phân bổ và làm mất hiệu lực vòng lặp; cho dù người ta làm như vậy hay không được thực hiện xác định. Vì vậy, tốt nhất bạn nên giả định rằng việc sửa đổi một vector theo bất kỳ cách nào luôn làm mất hiệu lực tất cả các trình lặp hiện có. – Miral