[STL] Các hàm thường dùng của lớp Vector trong C++
Trong lập trình C++, std::vector là một trong những cấu trúc dữ liệu quan trọng nhất trong thư viện tiêu chuẩn (STL). Nó cung cấp một mảng động có khả năng mở rộng tự động, giúp quản lý và xử lý dữ liệu một cách linh hoạt. Điều này làm cho vector trở thành một công cụ mạnh mẽ được sử dụng rộng rãi trong nhiều ứng dụng.

Trong bài viết này, mình sẽ tìm hiểu các hàm thông dụng của lớp vector trong C++. Từ việc thêm và xóa phần tử đến truy xuất và sắp xếp, chúng ta sẽ tìm hiểu về cách sử dụng các hàm này để quản lý và xử lý dữ liệu một cách hiệu quả. Hãy cùng nhau đi vào chi tiết để hiểu rõ hơn về cách làm việc với vector trong C++ và những ứng dụng thực tiễn của nó.

Vector trong C++ là gì và vai trò của nó trong STL?
Trong C++, vector là một loại dữ liệu được cung cấp sẵn trong thư viện chuẩn (STL - Standard Template Library). Vector là một cấu trúc dữ liệu mảng động, cho phép lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu một cách tuần tự. Một trong những đặc điểm nổi bật của vector là khả năng thay đổi kích thước của nó một cách linh hoạt, tức là có thể thêm hoặc xóa phần tử một cách dễ dàng mà không cần phải quan tâm đến việc quản lý bộ nhớ.
Vai trò của vector trong STL là cung cấp một cấu trúc dữ liệu linh hoạt và hiệu quả để lưu trữ dữ liệu trong các ứng dụng C++. Nó được sử dụng rộng rãi trong nhiều tình huống khác nhau, bao gồm:
Bài viết này được đăng tại [free tuts .net]
-
Lưu trữ và quản lý dữ liệu: Vector được sử dụng để lưu trữ các phần tử của cùng một kiểu dữ liệu và cung cấp các phương thức để thêm, xóa, truy xuất và sắp xếp các phần tử này.
-
Tích hợp với các thuật toán: Vector cung cấp các phương thức để thực hiện các thao tác cơ bản như sắp xếp, tìm kiếm, đảo ngược, thay đổi nội dung và nhiều hơn nữa. Các thuật toán này có thể được áp dụng trực tiếp trên vector một cách thuận tiện.
-
Thao tác với dữ liệu tuần tự: Do vector lưu trữ dữ liệu một cách tuần tự trong bộ nhớ, nên nó rất thích hợp cho việc thực hiện các thao tác trên dữ liệu tuần tự như danh sách, hàng đợi, ngăn xếp và nhiều cấu trúc dữ liệu khác.
Tóm lại, vector là một thành phần quan trọng trong STL của C++, cung cấp một cách linh hoạt và tiện lợi để làm việc với dữ liệu tuần tự trong các ứng dụng lập trình.
Các hàm thường dùng của lớp Vector trong C++
Thêm và xóa phần tử
push_back()
Thêm một phần tử vào cuối vector.
Ví dụ:
std::vector<int> numbers; numbers.push_back(10);
pop_back()
Xóa phần tử cuối cùng khỏi vector.
Ví dụ:
std::vector<int> numbers = {1, 2, 3};
numbers.pop_back();
insert()
Chèn một phần tử vào vị trí bất kỳ trong vector.
Ví dụ:
std::vector<int> numbers = {1, 3, 4};
numbers.insert(numbers.begin() + 1, 2); // Chèn số 2 vào vị trí thứ 2
erase()
Xóa phần tử tại một vị trí hoặc một dải phần tử trong vector.
Ví dụ:
std::vector<int> numbers = {1, 2, 3, 4, 5};
numbers.erase(numbers.begin() + 2); // Xóa phần tử thứ 3Truy xuất phần tử
at()
Truy cập phần tử tại một vị trí cụ thể trong vector và kiểm tra giới hạn của vector.
Ví dụ:
std::vector<int> numbers = {1, 2, 3};
int value = numbers.at(1); // Lấy giá trị của phần tử thứ 2
[]
Truy cập phần tử tại một vị trí cụ thể trong vector. Không kiểm tra giới hạn của vector, có thể gây lỗi nếu vị trí truy cập vượt quá kích thước của vector.
Ví dụ:
std::vector<int> numbers = {1, 2, 3};
int value = numbers[1]; // Lấy giá trị của phần tử thứ 2
front()
Trả về giá trị của phần tử đầu tiên trong vector.
Ví dụ:
std::vector<int> numbers = {1, 2, 3};
int firstValue = numbers.front(); // Lấy giá trị của phần tử đầu tiên
back()
Trả về giá trị của phần tử cuối cùng trong vector.
Ví dụ:
std::vector<int> numbers = {1, 2, 3};
int lastValue = numbers.back(); // Lấy giá trị của phần tử cuối cùngKiểm tra và truy vấn
size()
Hàm size() được sử dụng để trả về số lượng phần tử hiện có trong vector.
Ví dụ:
#include <iostream>
#include <vector>
// Bài đăng tại freetuts.net
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// Sử dụng hàm size() để kiểm tra số lượng phần tử trong vector
std::cout << "Số lượng phần tử trong vector: " << numbers.size() << std::endl;
return 0;
}
Output:
Số lượng phần tử trong vector: 5
capacity()
Hàm capacity() trả về dung lượng hiện tại của vector, tức là số lượng phần tử mà vector có thể chứa mà không cần phải cấp phát thêm bộ nhớ.
Ví dụ:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers;
// Bài đăng tại freetuts.net
// Sử dụng hàm capacity() để kiểm tra dung lượng của vector
std::cout << "Dung lượng của vector: " << numbers.capacity() << std::endl;
return 0;
}
Output:
Dung lượng của vector: 0
empty()
Hàm empty() trả về true nếu vector không chứa bất kỳ phần tử nào, ngược lại trả về false.
Ví dụ:
#include <iostream>
#include <vector>
// Bài đăng tại freetuts.net
int main() {
std::vector<int> numbers;
// Sử dụng hàm empty() để kiểm tra vector có rỗng không
if (numbers.empty()) {
std::cout << "Vector rỗng." << std::endl;
} else {
std::cout << "Vector không rỗng." << std::endl;
}
return 0;
}
Output:
Vector rỗng.
Sắp xếp và thay đổi
sort()
Hàm sort() được sử dụng để sắp xếp các phần tử trong vector theo thứ tự tăng dần.
Ví dụ:
#include <iostream>
#include <vector>
#include <algorithm> // Để sử dụng hàm sort()
// Bài đăng tại freetuts.net
int main() {
std::vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6};
// Sắp xếp các phần tử trong vector theo thứ tự tăng dần
std::sort(numbers.begin(), numbers.end());
// In ra vector sau khi sắp xếp
std::cout << "Vector sau khi sắp xếp: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// Bài đăng tại freetuts.net
return 0;
}
Output:
Vector sau khi sắp xếp: 1 1 2 3 4 5 6 9
reverse()
Hàm reverse() được sử dụng để đảo ngược thứ tự các phần tử trong vector.
Ví dụ:
#include <iostream>
#include <vector>
#include <algorithm> // Để sử dụng hàm reverse()
// Bài đăng tại freetuts.net
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// Đảo ngược thứ tự các phần tử trong vector
std::reverse(numbers.begin(), numbers.end());
// In ra vector sau khi đảo ngược
std::cout << "Vector sau khi đảo ngược: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
Output:
Vector sau khi đảo ngược: 5 4 3 2 1
swap()
Hàm swap() được sử dụng để hoán đổi nội dung giữa hai vector.
Ví dụ:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers1 = {1, 2, 3};
std::vector<int> numbers2 = {4, 5, 6};
// Bài đăng tại freetuts.net
// Trao đổi nội dung giữa hai vector
numbers1.swap(numbers2);
// In ra vector sau khi hoán đổi
std::cout << "Vector 1 sau khi hoán đổi: ";
for (int num : numbers1) {
std::cout << num << " ";
}
std::cout << std::endl;
std::cout << "Vector 2 sau khi hoán đổi: ";
for (int num : numbers2) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
Output:
Vector 1 sau khi hoán đổi: 4 5 6 Vector 2 sau khi hoán đổi: 1 2 3
clear()
Hàm clear() được sử dụng để xóa tất cả các phần tử trong vector, làm cho vector trở thành một vector rỗng.
Ví dụ:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// Bài đăng tại freetuts.net
// Xóa tất cả các phần tử của vector
numbers.clear();
// In ra vector sau khi xóa
std::cout << "Số lượng phần tử sau khi xóa: " << numbers.size() << std::endl;
return 0;
}
Output:
Số lượng phần tử sau khi xóa: 0
Ví dụ các hàm thường dùng của lớp Vector trong C++
Thêm và xóa phần tử
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
// Bài đăng tại freetuts.net
// Thêm phần tử vào cuối vector
vec.push_back(4);
// Xóa phần tử cuối cùng của vector
vec.pop_back();
// Chèn phần tử vào vị trí bất kỳ
vec.insert(vec.begin() + 1, 5);
// Xóa phần tử tại vị trí bất kỳ
vec.erase(vec.begin() + 2);
// In ra các phần tử của vector
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
Output:
1 5 3
Truy xuất phần tử
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// Truy xuất phần tử ở vị trí 2
int element = vec.at(2);
// Truy xuất phần tử ở vị trí 3
int element2 = vec[3];
// Lấy phần tử đầu tiên
int first_element = vec.front();
// Bài đăng tại freetuts.net
// Lấy phần tử cuối cùng
int last_element = vec.back();
std::cout << element << " " << element2 << " " << first_element << " " << last_element;
return 0;
}
Output:
3 4 1 5
Kiểm tra và truy vấn
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// Kiểm tra số lượng phần tử của vector
int size = vec.size();
// Bài đăng tại freetuts.net
// Kiểm tra dung lượng của vector
int capacity = vec.capacity();
// Kiểm tra xem vector có rỗng không
bool is_empty = vec.empty();
std::cout << "Size: " << size << ", Capacity: " << capacity << ", Empty: " << is_empty;
return 0;
}
Output:
Size: 5, Capacity: 5, Empty: 0
Sắp xếp và thay đổi
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {3, 1, 4, 1, 5, 9};
// Bài đăng tại freetuts.net
// Sắp xếp vector tăng dần
std::sort(vec.begin(), vec.end());
// Đảo ngược thứ tự các phần tử trong vector
std::reverse(vec.begin(), vec.end());
// Trao đổi nội dung giữa hai vector
std::vector<int> vec2 = {6, 7, 8};
vec.swap(vec2);
// Xóa tất cả các phần tử của vector
vec.clear();
return 0;
}Kết bài
Trong bài viết này, mình đã tìm hiểu về các hàm thông dụng của lớp vector trong STL của C++. mình đã tìm hiểu cách thêm và xóa phần tử, truy xuất phần tử, kiểm tra và truy vấn về số lượng và dung lượng của vector, cũng như các hàm sắp xếp và thay đổi nội dung của vector.
Việc hiểu và sử dụng thành thạo các hàm này sẽ giúp mình làm việc hiệu quả với dữ liệu vector trong các ứng dụng C++ của mình. Hy vọng bài viết này đã cung cấp cho bạn cái nhìn tổng quan và kiến thức cần thiết để bắt đầu làm việc với lớp vector trong STL.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng