Thường được hiểu rằng cách tốt nhất để xóa hoàn toàn các mục mong muốn từ một số std::vector
là erase-remove idiom.STL "xóa-loại bỏ" thành ngữ: Tại sao không "thay đổi kích thước-loại bỏ"?
Như đã nêu trong các liên kết ở trên (kể từ ngày niêm yết này), trong mã erase-loại bỏ ngữ trông như thế này:
int main()
{
// initialises a vector that holds the numbers from 0-9.
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// erase-remove idiom to completely eliminate the desired items from the vector
v.erase(std::remove(std::begin(v), std::end(v), 5), std::end(v));
}
Tôi muốn biết liệu một thành ngữ resize-remove
là tương đương về chức năng và hiệu suất cho thành ngữ erase-remove
. Hoặc, có lẽ tôi đang thiếu một cái gì đó hiển nhiên?
Sau đây là resize-remove
thành ngữ tương đương với thành phần trên erase-remove
?
int main()
{
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// Is this "resize-remove" approach equivalent to the "erase-remove" idiom?
v.resize(std::remove(std::begin(v), std::end(v), 5) - v.begin());
}
"thay đổi kích thước" là - theo định nghĩa - không phải là "thành ngữ" vì cụm từ không được người khác sử dụng ... –
@TonyD Đó là một lý do rất mạnh để thích thành phần xóa-xóa . –