Tôi đang đi vào C + + từ Java, và có một tình hình thiết kế phổ biến trong đó tôi có một phần tử (không nguyên thủy) mà tôi muốn loại bỏ từ một std :: vector.Chỉ mục kiểu ArrayListOf cho std :: vector in C++?
trong Java, tôi sẽ viết một cái gì đó như: arrayList.remove (arrayList.indexOf (myClassInstance));
trong C++, với std :: vector, cách tốt nhất/hiệu quả nhất/sạch nhất để làm việc này là gì?
điều tốt nhất tôi có thể nghĩ đến là tạo tham chiếu đến cá thể tôi đang tìm kiếm và sau đó lặp qua vectơ cho đến khi tôi tìm thấy tham chiếu đó. về cơ bản, để so sánh địa chỉ bộ nhớ của từng phần tử trong vectơ với tham chiếu cho đến khi tôi nhận được kết quả phù hợp.
Tôi đang đi đúng hướng? hoặc có cách nào tốt hơn để làm điều này? (có lẽ sử dụng một container std khác nhau, tôi đã chỉ sử dụng std :: vector cho đến nay.)
Giả sử bạn có một bộ sưu tập của con trỏ hoặc shared_ptr, std :: set có thể làm việc tốt cho bạn , chỉ cần so sánh các địa chỉ con trỏ. Nếu bạn biết địa chỉ của mục bạn đang tìm chỉ mySet.xóa (ptr); – CashCow
@CashCow - có nhiều sự khác biệt về hiệu suất trong việc lặp qua tất cả các thành viên của std :: set vs std: vector không? ở đâu đó trong mã của tôi, tôi đang gọi một phương thức trên mỗi phần tử trong tập hợp, mỗi chu kỳ. – ericsoco