std::vector::erase
#include <vector>
iterator erase(iterator pos);
iterator erase(iterator first, iterator last);
Xóa một hoặc nhiều phần tử khỏi vector.
Tham số
pos
- Iterator trỏ đến phần tử cần xóa.
first
- Iterator trỏ đến phần tử đầu tiên của phạm vi cần xóa.
last
- Iterator trỏ tới phần tử ngay sau phần tử cuối cùng của phạm vi cần xóa.
Giá trị trả về
- Trả về iterator trỏ tới phần tử ngay sau phần tử (hoặc dải phần tử) cuối cùng đã bị xóa.
- Nếu không còn phần tử nào sau phạm vi xóa, trả về
end()
của vector.
Đặc điểm
- Phần tử (hoặc dải phần tử) bị xóa sẽ được loại bỏ và các phần tử sau nó sẽ dịch lên để lấp chỗ trống.
- Kích thước vector sẽ giảm tương ứng với số phần tử bị xóa.
- Chi phí tính toán (time complexity):
O(1)
cho thao tác xóa ở cuối vector.O(n)
trong trường hợp phần tử bị xóa ở giữa hoặc đầu vector (do phải dịch chuyển các phần tử sau đó).
- Nếu bạn xóa phần tử với một iterator không hợp lệ (không trỏ tới vector hoặc ngoài phạm vi), kết quả là không xác định (undefined behavior).
- Xóa phần tử có thể gây ra việc di chuyển các phần tử sau đó lên vị trí mới để lấp đầy khoảng trống, điều này có thể làm vô hiệu hóa các iterator, con trỏ và các tham chiếu tới các phần tử sau đó.
- Xóa phần tử từ vector không làm giảm dung lượng (capacity), nhưng làm giảm kích thước (size).
- Sử dụng
shrink_to_fit()
nếu bạn muốn giảm dung lượng sau khi xóa phần tử.
Ví dụ
Xóa một phần tử
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// Xóa phần tử thứ 2 (giá trị 2)
vec.erase(vec.begin() + 1);
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
Xóa một dải phần tử
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// Xóa các phần tử từ vị trí thứ 1 đến vị trí thứ 3 (2, 3, 4)
vec.erase(vec.begin() + 1, vec.begin() + 4);
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
Các hàm liên quan
pop_back | Xóa phần tử cuối cùng của vector |
insert | Chèn một hoặc nhiều phần tử vào vị trí chỉ định trong vector |