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()
và 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.