std::deque::erase
#include <deque>
// Phiên bản 1: Xóa một phần tử tại vị trí được chỉ định
iterator erase(const_iterator pos);
// Phiên bản 2: Xóa các phần tử trong một phạm vi
iterator erase(const_iterator first, const_iterator last);
Xóa một hoặc nhiều phần tử khỏi deque tại một vị trí cụ thể hoặc trong một phạm vi.
Tham số
pos
- Iterator trỏ đến phần tử cần xóa.
pos
phải là một iterator hợp lệ và có thể dereference được trong deque.
first, last
- Iterator xác định phạm vi các phần tử cần xóa.
first
trỏ đến phần tử đầu tiên cần xóa,last
trỏ đến phần tử sau phần tử cuối cùng cần xóa (past-the-end).
Giá trị trả về
- Trả về một iterator trỏ đến phần tử theo sau phần tử cuối cùng bị xóa. Nếu không có phần tử nào như vậy (ví dụ: xóa phần tử cuối cùng của deque), hàm trả về
end()
.
Đặc điểm
erase()
cho phép bạn xóa một phần tử duy nhất hoặc một dãy các phần tử liên tiếp.erase()
làm giảm kích thước của deque tương ứng với số lượng phần tử bị xóa.- Gọi
erase()
vớipos
làend()
hoặc không phải là iterator hợp lệ của deque sẽ dẫn đến hành vi không xác định. - Việc xóa phần tử khỏi deque có thể làm thay đổi (invalidate) các iterator khác đang trỏ đến các phần tử trong deque (bao gồm cả iterator được trả về).
- Độ phức tạp:
- Xóa một phần tử:
O(n)
trong trường hợp xấu nhất (khi xóa ở đầu),O(1)
trong trường hợp tốt nhất (khi xóa ở cuối), với n là số phần tử trong deque. Trung bình làO(min(n, N-n))
với n là khoảng cách từpos
tới đầu deque vàN-n
là khoảng cách từpos
đến cuối deque. - Xóa nhiều phần tử: Độ phức tạp phụ thuộc vào số lượng phần tử bị xóa và vị trí xóa.
- Xóa một phần tử:
Ví dụ
#include <iostream>
#include <deque>
int main() {
std::deque<int> myDeque = {10, 20, 30, 40, 50, 60, 70, 80};
// Phiên bản 1: Xóa phần tử thứ ba (có giá trị 30)
auto it = myDeque.begin() + 2;
myDeque.erase(it);
std::cout << "myDeque after erase(it):";
for (int x : myDeque) std::cout << ' ' << x; // Output: myDeque after erase(it): 10 20 40 50 60 70 80
std::cout << '\n';
// Phiên bản 2: Xóa ba phần tử đầu tiên
myDeque.erase(myDeque.begin(), myDeque.begin() + 3);
std::cout << "myDeque after erase(myDeque.begin(), myDeque.begin() + 3):";
for (int x : myDeque) std::cout << ' ' << x; // Output: myDeque after erase(myDeque.begin(), myDeque.begin() + 3): 50 60 70 80
std::cout << '\n';
// Phiên bản 2: Xóa hai phần tử cuối cùng
myDeque.erase(myDeque.end() - 2, myDeque.end());
std::cout << "myDeque after erase(myDeque.end() - 2, myDeque.end()):";
for (int x : myDeque) std::cout << ' ' << x; // Output: myDeque after erase(myDeque.end() - 2, myDeque.end()): 50 60
std::cout << '\n';
return 0;
}
Các hàm liên quan
pop_back | Xóa phần tử cuối cùng của deque |
insert | Chèn một hoặc nhiều phần tử mới vào một vị trí cụ thể trong deque |