Search…

STL - Vector Trong C++

08/09/20203 min read
Hướng dẫn sử dụng STL vector container trong C++, các phương thức duyệt, thêm, chỉnh sửa các phần tử.

STL là gì?

Đọc thêm STL - List Trong C++.

Vector là gì?

vector được hiện thực là một mảng liên tục, khác với cách hiện thực của list, nó có thể truy xuất ngẫu nhiên. Không những tối ưu về tốc độ truy xuất như mảng, thiết kế của vector còn cho phép thêm và gỡ bỏ 1 phần tử 1 cách linh động.

Cách sử dụng

Để sử dụng vector #include <vector>

vector là một lớp được định nghĩa sẵn trong STL với các hàm constructor đã được overload và destructor cho phép dọn dẹp vùng nhớ cùng với iterator cho phép truy cập và quản lý phần tử trong nó.

Constructor

// default constructor
vector<double> second;

// fill constructor
vector<double> first(4, 50); // first = { 50, 50, 50, 50}
first.push_back (3.1);
first.push_back (2.2);
first.push_back (2.9);
// first = { 50, 50, 50, 50, 3.1, 2.2, 2.9}	

// position truy cập đến vị trí đầu tiên chứa giá trị 50
vector<double>::iterator position = first.begin();
position += 2; // position truy cập đến vị trí thứ 3 chứa giá trị 50

vector<double>::iterator position1 = first.end();
position1 -= 2; // position truy cập đến vị trí thứ 5 chứa giá trị 3.1
	
// range constructor
vector<double> third(position, position1); // third = { 50, 50, 3.1}

*position = 5.5;
cout << first[2];// 5.5

Truy xuất ngẫu nhiên với at() hay toán tử []

Ngoài ra vector còn có hàm thành viên cho phép truy xuất trực tiếp đến giá trị của các phần tử trong nó, đây là điều làm cho việc sử dụng vector tiện lợi hơn so với list, toán tử [] hay hàm thành viên at() cho phép truy xuất giá trị tại một vị trí trong mảng.

vector<double> first(4, 50); // first = { 50, 50, 50, 50}

first.push_back (3.1);
first.push_back (2.2);
first.push_back (2.9);
// first = { 50, 50, 50, 50, 3.1, 2.2, 2.9}

cout << first.at(5) << endl << first[6]; // output: 2.2 and 2.9

Trong ví dụ trên với các hàm push_back() có chức năng là thêm vào một giá  trị cho vector, pop_back() chức năng xóa phần tử cuối cùng của vector mà không cần quan tâm đến kích thước như mảng, tương tự ta có push_front()pop_front() thêm và xóa phần tử đầu.

Thay đổi nội dung của 2 vector với swap()

Với hàm thành viên swap() cho phép hoán đổi nội dung giữa 2 vector:

vector<int> foo (3,100);   // three ints with a value of 100
vector<int> bar (5,200);   // five ints with a value of 200

foo.swap(bar);
// foo: 200 200 200 200 200
// bar: 100 100 100

Chèn phần từ vào vector với insert

vector<int> myvector(4, 10);
myvector.insert(myvector.begin(), 5, 1); // 1 1 1 1 1 10 10 10 10

vector<int> myvector (4, 100);
vector<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);

myvector.insert(myvector.begin(), l.begin(), l.end());
// 1 2 3 100 100 100 100

vector<int> vector2(4, 10);
vector2.push_back(5);
vector2.insert(vector2.begin(), 9);
// 9 10 10 10 10 5

Kiểm tra trạng thái rỗng của vector với empty()

Với hàm thành viên empty() cho phép kiểm tra vector có rỗng hay không, kết quả trả về là true hoặc false:

vector<double> first;

if(first.empty() == true)
{
       cout << "No values in first \n";
}

Xóa tất cả phần tử của vector với clear()

Dùng hàm thành viên clear() để xóa hết các phần tử của vector:

vector<double> first(4, 50); // first = { 50, 50, 50, 50}

first.push_back (3.1);
first.push_back (2.2);
first.push_back (2.9);

first.clear();

Lấy kích thước của vector với size()

vector<double> second(10);
cout << second.size();

Thay đổi kích thước vector với resize() hay resize(element, value)

vector<double> second(10, 2);
	
second.resize(5);
for( int i = 0; i < second.size(); i++)
	cout << second[i] << endl;
// output will be 2 2 2 2 2

vector<double> third(7, 3);
third.resize(10);
for( int i = 0; i < third.size(); i++)
	cout << third[i] << endl;

// output will be 3 3 3 3 3 3 3 0 0 0

Tham khảo thêm bài viết STL - List Trong C++ để xem thêm 1 số phương thức chung của vector có tính năng giống với vector không được đề cập trong bài viết này.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024