Cách thành ngữ để xóa tất cả các phần tử khỏi vùng chứa STL đáp ứng một vị từ đã cho là sử dụng remove-erase idiom. Ý tưởng là để di chuyển vị (đó là các chức năng trong đó sản lượng đúng hay sai đối với một số phần tử) vào một chức năng nhất định, nói pred
và sau đó:
static bool pred(const std::string &s) {
// ...
}
std::vector<std::string> v;
v.erase(std::remove_if(v.begin(), v.end(), pred), v.end());
Nếu bạn nhấn mạnh vào việc sử dụng các chỉ số, bạn không nên tăng chỉ số cho mỗi yếu tố, nhưng chỉ dành cho những người mà không được loại bỏ:
std::vector<std::string>::size_type i = 0;
while (i < v.size()) {
if (shouldBeRemoved(v[i])) {
v.erase(v.begin() + i);
} else {
++i;
}
}
Tuy nhiên, đây không phải chỉ đang ngày càng ít thành ngữ (đọc: C lập trình viên ++ thực sự phải nhìn vào các mã trong khi 'xóa & loại bỏ 'thành ngữ ngay lập tức cho một số ý tưởng những gì đang xảy ra), nhưng cũng kém hiệu quả hơn vì vectơ lưu trữ thứ các phần tử eir trong một khối bộ nhớ liền kề, do đó việc xóa các vị trí khác với đầu vectơ cũng sẽ di chuyển tất cả các phần tử sau khi phân đoạn bị xóa sang vị trí mới của chúng.
Nguồn
2011-12-21 22:37:53
Bạn có thể sử dụng 'remove_if' và' erase'? http://en.wikipedia.org/wiki/Erase-remove_idiom – msandiford
Xóa Xóa: http://stackoverflow.com/questions/4175896/safe-way-to-continuously-erase-from-a-stdvector –