Tôi tạo một std::list
các mục (cấu trúc thành phần biểu đồ) được hợp nhất theo định kỳ với nhau. Ý tưởng là nếu tôi phát hiện ra một nút kết nối hai thành phần, chúng trở thành một thành phần duy nhất và danh sách của tôi liệt kê các thành phần của tôi. Mỗi thành phần có một tay cầm (trong trường hợp này là std::list<component>::iterator
) thành thành phần "cha mẹ" được thiết lập khi nó được hợp nhất. Cách này để xác định thành phần một nút cụ thể thuộc về tôi đi bộ chuỗi này.Xóa mục trong std :: list trong khi để nó được phân bổ
Trong cuối những gì tôi đang tìm kiếm là hoạt động trên std::list
cho phép tôi để có một iterator của mục N
, và loại bỏ nó khỏi danh sách nhưng không deallocating nó: cấu trúc của phần còn lại của danh sách được sửa đổi chính xác giống như cách xóa thông thường.
Tốt hơn là cái gì đó ít xấu xí hơn phân bổ lại mục, sao chép mục từ danh sách và gọi số remove
hoặc erase
thực.
Có lẽ tôi có thể hoàn thành nó với splice
. Tôi cần phải ghép các yếu tố để được loại bỏ vào một "rác" list
, phải không?
'ghép nối vào danh sách _junk_ âm thanh về đúng ... –
Và cách tiếp cận như vậy có khả năng không chắc rằng việc sử dụng trình phân bổ không tương thích sẽ buộc sao chép. Tuy nhiên ... có thêm một vài con trỏ bị xáo trộn. Vâng ... không * tổn thương * để có một cách để lặp qua các nút không đầy đủ mồ côi của tôi. –
Tại sao sử dụng danh sách thay vì danh sách không phù hợp với bạn? –