Vector
Bài học 5 trên 23 trong khóa học C++ - Thư viện mẫu chuẩn của Coddy.
Vector trong C++ STL về cơ bản là một mảng có kích thước động. Vector có thể tự động thay đổi kích thước khi bạn thêm hoặc xóa một phần tử. Các phần tử của vector được lưu trữ liên tiếp, nhờ đó bạn có thể truy cập, sửa đổi và duyệt qua chúng bằng iterator.
Trong vector, dữ liệu được thêm vào cuối. Vector là cấu trúc dữ liệu chậm hơn mảng, nhưng vector đủ nhanh để dùng giải quyết vấn đề, kể cả ở mức độ phức tạp của các cuộc thi lập trình.
Để dùng vector trong C++, bạn cần đưa thư viện vào đầu tệp bằng #include <vector>.
!Lưu ý: Trong C++ có một tệp tiêu đề không chuẩn tên là bits/stdc++.h. Bạn có thể đưa tệp này vào đầu tệp C++ để dùng bất kỳ thành phần nào của thư viện chuẩn mà không cần đưa từng thành phần vào riêng. (#include <bits/stdc++.h)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Đoạn code...
return 0;
}#include <bits/stdc++.h>
using namespace std;
int main()
{
// Viết code...
return 0;
}Vậy làm thế nào để tạo, khởi tạo và dùng một vector? Ta dùng từ khóa vector<>. Bên trong <> là kiểu biến, tức kiểu dữ liệu của các phần tử mà ta sẽ lưu trong vector. Nếu muốn khai báo một vector để lưu số nguyên, ta dùng vector<int>.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[0];
return 0;
}Output:
1Như bạn thấy ở trên, vector hoạt động giống hệt mảng. Ta khai báo một vector kiểu int có tên numbers và khởi tạo vector bằng một số giá trị. Sau đó, ta dùng dấu ngoặc vuông, [], để in ra phần tử đầu tiên, tức phần tử ở chỉ số 0.
Ta thêm phần tử vào cuối vector bằng hàm push_back(). Phương thức push_back() thêm một phần tử mới vào sau phần tử cuối cùng trong vector.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[2] << endl;
numbers.push_back(10);
cout << numbers[3];
return 0;
}Output:
3
10Như bạn thấy, ta dùng phương thức bằng cách viết tên vector, theo sau là dấu chấm .. Sau khi dùng phương thức push_back(), kích thước vector tăng thêm một.
Ta cũng có phương thức size() để lấy số phần tử trong vector.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers.size();
return 0;
}Output:
3Ta thường dùng phương thức size() khi không biết vector có bao nhiêu phần tử nhưng muốn lặp qua các phần tử đó. Vì vậy, trong điều kiện của vòng lặp, ta dùng vector.size().
Cấu trúc dữ liệu vector có nhiều chức năng và tính năng, chẳng hạn như hàm resize(n) thay đổi kích thước vector thành n và nhiều tính năng khác. Ta sẽ tìm hiểu thêm về chúng khi học thuật toán và hàm. Còn bây giờ, hãy nhớ rằng vector là mảng có kích thước động, cách khai báo vector và cách thêm phần tử mới bằng phương thức push_back().
Ví dụ: Dưới đây là một chương trình ví dụ, trong đó người dùng sẽ tiếp tục nhập số cho đến khi nhập -1. Ta sẽ dùng vòng lặp và vector để lưu các số đó vì ta không biết sẽ có bao nhiêu phần tử.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;
vector<int> numbers;
while(x != -1)
{
cin >> x;
numbers.push_back(x);
}
return 0;
}Trong mỗi bài học, bạn sẽ được cung cấp bảng các phương thức có thể dùng với cấu trúc dữ liệu C++ tương ứng.
Các phương thức của vector
| Phương thức | Chức năng |
| push_back() | Thêm một phần tử mới vào cuối vector |
| pop_back() | Xóa phần tử cuối cùng khỏi vector |
| swap() | Hoán đổi các phần tử được chỉ định |
| front() | Trả về tham chiếu đến phần tử đầu tiên |
| back() | Trả về tham chiếu đến phần tử cuối cùng |
| empty() | Kiểm tra vector có rỗng hay không |
| clear() | Xóa tất cả phần tử khỏi vector |
| resize() | Thay đổi kích thước vector |
| size() | Trả về số phần tử trong vector |
| insert() | Chèn phần tử được chỉ định vào vị trí được chỉ định |
Thử thách
DễNhập các số dương cho đến khi nhập -1. Sau đó, số tự nhiên N được nhập cuối cùng là số cần kiểm tra. In ra mọi phần tử mà N chia hết cho nó.
Ví dụ:
Input
5
10
15
-1
100Output
5
10vì 100 chia hết cho 5 và 10, nhưng không chia hết cho 15
Input
2
4
6
8
-1
12Output
2
4
6Vì 12 chia hết cho 2, 4, 6, nhưng không chia hết cho 8
Tự làm thử
#include <vector>
#include <iostream>
using namespace std;
int main()
{
// Enter your code here
return 0;
}Tất cả bài học trong C++ - Thư viện mẫu chuẩn
Tự luyện tập: Trình biên dịch C++ online