Trong C++, thư viện chuẩn STL cung cấp một lớp rất hữu ích cho việc làm việc với các mảng động: std::vector
. std::vector
là một container có thể thay đổi kích thước, giúp chúng ta quản lý bộ nhớ một cách hiệu quả và linh hoạt. Bài viết này sẽ tổng hợp các hàm quan trọng của std::vector
và hướng dẫn bạn cách sử dụng chúng.
1. Khởi tạo std::vector
Trước tiên, chúng ta cần khởi tạo một std::vector
. Dưới đây là một số cách để khởi tạo vector:
#include <vector>
#include <iostream>
int main() {
// Khởi tạo vector rỗng
std::vector<int> vec1;
// Khởi tạo vector với kích thước nhất định và giá trị mặc định
std::vector<int> vec2(5, 10); // Vector có 5 phần tử, mỗi phần tử có giá trị là 10
// Khởi tạo vector với danh sách khởi tạo
std::vector<int> vec3 = {1, 2, 3, 4, 5};
return 0;
}
2. Thêm và Xóa Phần Tử
Thêm phần tử: Bạn có thể sử dụng các hàm push_back
hoặc emplace_back
để thêm phần tử vào cuối vector.
std::vector<int> vec;
vec.push_back(1);
vec.emplace_back(2); // Tạo phần tử trực tiếp và thêm vào cuối
Xóa phần tử: Bạn có thể sử dụng các hàm pop_back
, erase
hoặc clear
.
vec.pop_back(); // Xóa phần tử cuối cùng
vec.erase(vec.begin() + 1); // Xóa phần tử tại vị trí chỉ định
vec.clear(); // Xóa tất cả các phần tử
3. Truy cập Phần Tử
Sử dụng chỉ mục: Truy cập phần tử bằng cách sử dụng chỉ mục (index).
int value = vec[0]; // Truy cập phần tử đầu tiên
Sử dụng hàm at
: Hàm at
cung cấp sự kiểm tra lỗi và ném ngoại lệ nếu chỉ mục không hợp lệ.
int value = vec.at(0); // Truy cập phần tử đầu tiên
Sử dụng hàm front
và back
: Truy cập phần tử đầu tiên và phần tử cuối cùng.
int first = vec.front(); // Phần tử đầu tiên
int last = vec.back(); // Phần tử cuối cùng
4. Kích Thước và Dung Lượng
Lấy kích thước: Số lượng phần tử hiện tại trong vector.
size_t size = vec.size();
Lấy dung lượng: Kích thước bộ nhớ đã cấp phát cho vector.
size_t capacity = vec.capacity();
Kiểm tra rỗng: Xem vector có rỗng hay không.
bool isEmpty = vec.empty();
5. Đổi Kích Thước và Dung Lượng
Thay đổi kích thước: Bạn có thể thay đổi kích thước vector bằng cách sử dụng hàm resize
.
vec.resize(10, 0); // Thay đổi kích thước thành 10, phần tử mới sẽ có giá trị 0
Dự trữ dung lượng: Dự trữ bộ nhớ để cải thiện hiệu suất.
vec.reserve(20); // Dự trữ bộ nhớ cho tối đa 20 phần tử
6. Sao Chép và Di Chuyển
Sao chép: Sử dụng toán tử gán hoặc hàm khởi tạo sao chép.
std::vector<int> vecCopy = vec; // Sao chép vector
Di chuyển: Sử dụng toán tử gán di chuyển hoặc hàm khởi tạo di chuyển để chuyển quyền sở hữu tài nguyên.
std::vector<int> vecMoved = std::move(vec);
7. Lặp Qua Vector
Sử dụng vòng lặp for
:
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
Sử dụng vòng lặp range-based for
:
for (const auto& elem : vec) {
std::cout << elem << " ";
}
Sử dụng iterator:
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
8. Các Hàm Khác
assign
: Gán giá trị mới cho toàn bộ vector.
vec.assign(5, 1); // Vector sẽ có 5 phần tử, mỗi phần tử có giá trị 1
swap
: Hoán đổi nội dung của hai vector.
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};
vec1.swap(vec2);
shrink_to_fit
: Giảm dung lượng của vector để phù hợp với kích thước hiện tại.
vec.shrink_to_fit();
Kết Luận
std::vector
là một trong những container mạnh mẽ nhất trong C++ với nhiều hàm hữu ích để quản lý bộ nhớ và dữ liệu. Bằng cách sử dụng các hàm đã được đề cập, bạn có thể dễ dàng thao tác với dữ liệu trong vector một cách linh hoạt và hiệu quả. Hãy thử áp dụng những kiến thức này trong các dự án của bạn để thấy sự khác biệt trong việc quản lý dữ liệu!
Kết nối với web designer Lê Thành Nam