Bài viết này mình sẽ hướng dẫn các bạn sử dụng các hàm phổ biến của lớp vector, vector hỗ trợ các thao tác thêm, chèn, sửa xóa, thay đổi kích thước...
1. Hàm Truy Cập Phần Tử
Để truy cập vào các phần tử trong vector bạn có thể thông qua chỉ số, ngoài ra bạn có thể nhanh chóng truy cập vào phần tử ở đầu và cuối vector.
Tổng hợp các hàm truy cập phần tử trong vector :
| Toán tử [] | Truy cập phần tử thông qua chỉ số |
| at(index) | Truy cập phần tử thông qua chỉ số |
| front() | Truy cập phần tử đầu tiên trong vector |
| back() | Truy cập phần tử cuối cùng trong vector |
Ví dụ :
#include <vector>
using namespace std;
int main() {
vector<int> v = {100, 200, 300, 400, 500};
cout << "Duyet vector : \n";
for (int i = 0; i < 5; i++) {
cout << v.at(i) << " ";
}
cout << "\nPhan tu dau tien : " << v.front() << endl;
cout << "Phan tu cuoi cung : " << v.back() << endl;
}
Output :
Phan tu dau tien : 100
Phan tu cuoi cung : 500
2. Hàm Kích Thước
Vector cung cấp các hàm kiểm tra số lượng phần tử, check rỗng, thay đổi kích thước của vector.
Tổng hợp các hàm liên quan tới kích thước phần tử trong vector :
| size() | Trả về kích thước của vector |
| empty() | Kiểm tra vector rỗng trả về true, ngược lại trả về false |
| max_size() | Trả về kích thước tối đa của vector |
| resize() | Thay đổi kích thước của vector |
Ví dụ :
#include <vector>
using namespace std;
int main() {
vector<int> v = {100, 200, 300, 400, 500};
cout << "So luong phan tu : " << v.size() << endl;
cout << "Max size : " << v.max_size() << endl;
v.resize(3); // {100, 200, 300}
cout << "So luong phan tu : " << v.size() << endl;
v.resize(0);
cout << "Vector rong : " << boolalpha << v.empty() << endl;
}
Output :
Max size : 4611686018427387903
So luong phan tu : 3
Vector rong : true
Chú ý: Theo kết quả trả về của hàm max_size() thì vector có thể lưu đến 4611686018427387903 phần tử, tuy nhiên đây chỉ là trên lý thuyết. Thông thường thì vector cũng chỉ lưu được số lượng phần tử tương tự như mảng 1 chiều (cỡ 107 phần tử) và còn phụ thuộc vào bộ nhớ cho phép.
3. Hàm Thêm, Chèn, Xóa
Vector cung cấp các hàm giúp bạn có thể thêm phần tử hoặc xóa phần tử khỏi vector, các hàm này sẽ làm kích thước của vector bị thay đổi theo.
Tổng hợp các hàm thay đổi vector :
| push_back() | Thêm phần tử vào cuối vector |
| emplace_back() | Thêm phần tử vào cuối vector |
| pop_back() | Xóa phần tử cuối cùng trong vector |
| insert() | Chèn phần tử vào vị trí bất kỳ trong vector |
| erase() | Xóa phần tử khỏi vị trí bất kỳ trong vector |
| clear() | Xóa toàn bộ phần tử trong vector |
| assign() | Gán giá trị cho phần tử trong vector |
| swap() | Hoán đổi 2 vector |
Hàm push_back(), emplace_back(), pop_back() :
Để thêm phần tử vào cuối vector bạn có thể dùng push_back() hoặc emplace_back(), còn để xóa phần tử cuối trong vector bạn dùng pop_back(). Lưu ý rằng khi vector rỗng mà bạn cố tính pop_back() sẽ gây lỗi.
Độ phức tạp : O(1)
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
v.push_back(4);
v.emplace_back(5);
v.push_back(6);
cout << "Duyet vector : \n";
for (int x : v) {
cout << x << " ";
}
v.pop_back();
cout << "\nDuyet vector : \n";
for (int x : v) {
cout << x << " ";
}
}
Output :
Duyet vector : 1 2 3 4 5
Hàm insert() :
Hàm insert() giúp bạn chèn phần tử vào chỉ số bất kỳ trong mảng, tuy nhiên bạn phải insert thông qua iterator.
Ví dụ bạn chèn phần tử vào chỉ số 3 thì bạn cần insert thông qua iterator là v.begin() + 3
Độ phức tạp : O(N)
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
// Chen vao chi so 3
v.insert(v.begin() + 3, 28);
cout << "Duyet vector : \n";
for (int x : v) {
cout << x << " ";
}
// Chen vao dau :
v.insert(v.begin(), 1000);
cout << "\nDuyet vector : \n";
for (int x : v) {
cout << x << " ";
}
}
Output :
Duyet vector : 1000 1 2 3 28 4 5
Hàm erase() :
Tương tự như hàm insert() thì hàm erase() giúp bạn xóa 1 phần tử trong vector thông qua chỉ số của nó.
Bạn cũng cần truyền vào hàm erase() iterator đến phần tử mà bạn cần xóa.
Độ phức tạp : O(N)
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
// xoa phan tu o chi so 3
v.erase(v.begin() + 3);
cout << "Duyet vector : \n";
for (int x : v) {
cout << x << " ";
}
// xoa phan tu o dau
v.erase(v.begin());
cout << "\nDuyet vector : \n";
for (int x : v) {
cout << x << " ";
}
}
Output :
Duyet vector : 2 3 5
Hàm clear() :
Hàm clear() giúp xóa toàn bộ phần tử khỏi vector và vector sẽ trở thành rỗng
Độ phức tạp O(N)
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
v.clear();
cout << "Vector size : " << v.size() << endl;
cout << "Vector rong : " << boolalpha << v.empty() << endl;
}
Output :
Vector rong : true
Hàm assign() :
Hàm assign() giúp bạn gán giá trị toàn bộ các phần tử trong vector hoặc 1 vài phần tử trong vector, bạn cũng có thể gán nội dung của mảng hay vector khác sang vector hiện tại. Hàm này sẽ làm thay đổi kích thước của vector.
Độ phức tạp : O(N)
#include <vector>
using namespace std;
int main() {
vector<int> v1;
// Gan 5 phan tu dau tien là 28
v1.assign(5, 28);
cout << "Vector v1 : ";
for (int x : v1) {
cout << x << ' ';
}
vector<int> v2;
// gan 3 phan tu dau tien trong v1 => v2
v2.assign(v1.begin(), v1.begin() + 3);
cout << "\nVector v2 : ";
for (int x : v2) {
cout << x << ' ';
}
}
Output :
Vector v2 : 28 28 28
Hàm swap() :
Hàm swap() giúp bạn có thể hoán đổi nội dung của 2 vector.
Độ phức tạp : O(N)
#include <vector>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3, 4, 5, 6};
vector<int> v2 = {100, 200, 300, 400, 500};
v1.swap(v2);
cout << "Vector v1 : ";
for (int x : v1) {
cout << x << " ";
}
cout << endl;
cout << "Vector v2 : ";
for (int x : v2) {
cout << x << " ";
}
}
Output :
Vector v2 : 1 2 3 4 5 6