Menu
CoddyTech

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:
1

Như 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
10

Như 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:
3

Ta 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ứcChứ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
challenge icon

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
100
Output
5
10

vì 100 chia hết cho 5 và 10, nhưng không chia hết cho 15

 

Input
2
4
6
8
-1
12
Output
2
4
6

Vì 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