Vector trong C++ | Laptrinhcanban.com

Vector trong C++

Cùng tìm hiểu về kiểu vector trong C++. Bạn sẽ biết khái niệm vector là gì trong C++, cách khai báo vector trong C++, cách khởi tạo vector trong C++, cách gán vector trong C++ cũng như cách truy xuất của vector. Bạn cũng sẽ biết sự khác biệt giữa mảng và vector trong C++ sau bài học này.

Kiểu vector trong C++

Kiểu vector trong C++ hay còn gọi là mảng động hoặc mảng độ dài thay đổi, là kiểu dữ liệu có chức năng tương tự như mảng trong C++ nhưng lại có khả năng tự thay đổi độ dài.

Ưu điểm lớn nhất của kiểu vector trong C++ đó chính là khả năng tự do thay đổi kích thước của nó.

Trong ngôn ngữ C++, để xử lý nhiều giá trị cùng một lúc, chúng ta thường hay dùng tới kiểu mảng. Tuy nhiên, như Kiyoshi đã trình bày trong loạt bài về mảng trong C++, thì mảng trong C++ có độ dài không đổi, chúng ta không thể thay đổi chiều dài của một mảng sau khi đã tạo ra nó. Điều này đôi khi đem lại rất nhiều khó khăn khi chúng ta muốn thêm, hay xóa phần tử trong mảng.

Và để giải quyết vấn đề này thì kiểu vector trong C++ đã được ra đời. Đây là kiểu dữ liệu có chức năng giống như mảng, nhưng điều khác biệt là ở chỗ kiểu vector trong C++ có khả năng tự thay đổi độ dài của nó, nên khiến việc xử lý dữ liệu trở nên dễ dàng và linh hoạt hơn.

vector trong C++

std::vector trong C++ là một thư viện chuẩn được sử dụng để xử lý mảng động trong C++.

Bằng cách sử dụng vector trong C++, ngoài việc xử lý mảng động như mảng thông thường với các chức năng như truy cập phần tử, duyệt mảng, gán và thay đổi giá trị, thì chúng ta còn có thể dễ dàng thêm xóa và thay đổi độ dài của chúng.

std::vector được cài sẵn trong header file vector và để sử dụng được chức năng này, chúng ta cần thêm dòng 「#include <vector> 」 vào đầu chương trình.

Ví dụ:

#include <vector>   
int main()
{
std::vector<int> v1;
std::vector<double> v2;
}

Lại nữa, namespace của std::vector là std, do đó bằng cách khai báo sử dụng namespace này vào đầu chương trình mà chúng ta có thể viết gọn std::vector trong chương trình như sau:

#include <vector>   
using namespace std;
int main()
{
vector<int> v1;
vector<double> v2;
}

Khai báo vector trong C++

Khai báo 1 vector trong C++

Để khai báo vector trong C++, chúng ta viết dòng std::vector, sau đó viết kiểu dữ liệu giữa cặp dấu <>, và cuối cùng là tên biến như sau:

std::vector<type> data;

Trong đó data là tên biến vector và type là kiểu dữ liệu. Chúng ta có thể dùng bất cứ kiểu dữ liệu nào có trong C++ để khai báo type, ví dụ như char, int, double, hay cấu trúc hoặc class tự tạo chẳng hạn.

Trong trường hợp đã khai báo namespace std vào đầu chương trình, chúng ta cũng có thể lược bỏ dòng std:: và dùng cú pháp khai báo vector như sau:

using namespace std;
vector<type> data;

Thông thường chúng ta hay khai báo namespace std vào đầu chương trình để sử dụng tới các chức năng thông dụng khác như nhập xuất chẳng hạn, nên trong 2 phương pháp khai báo vector ở trên thì phương pháp thứ 2 thường được sử dụng nhiều hơn.

Lưu ý vector được khai báo với cú pháp này sẽ có 0 phần tủ bên trong nó. Sau khi khai báo vector kiểu này, chúng ta có thể sử dụng các hàm thành viên để có thể thêm phần tử vào nó sau này.

Ví dụ cụ thể:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<string> name; //Khai báo vector name kiểu string
vector<int> age; //Khai báo vector age kiểu int
}

Ngoài ra cách viết sử dụng cặp dấu <> như trên được viết theo cú pháp khi sử dụng chức năng template của C++ mà chúng ta sẽ cùng học trong các chuyên đề sau.

Khai báo vector trong C++ bao gồm chỉ định số phần tử

Mặc dù kiểu vector trong C++ là loại mảng động có khả năng tự thay đổi kích thước, tuy nhiên trong trường hợp không chỉ định rõ kích thước của nó, thì việc xử lý nó trong chương trình sẽ tiêu tốn thời gian nhiều hơn so với khi biết kích thước cụ thể của nó.

Bởi vậy nếu đã biết kích thước trước của một vector, chúng ta nên chỉ định độ dài (số phần tử) khi khai báo nó, với cú pháp sau đây:

std::vector<type> data(length);

Trong đó length chính là độ dài(số phần tử() của vector cần tạo.

Với cách khai báo vector này thì các phần tử trong vector sẽ được gán giá trị mặc định tùy thuộc vào kiểu dữ liệu sử dụng

Ví dụ, nếu dùng kiểu số như int, double thì các phần tử sẽ có giá trị mặc định bằng 0 như sau:

/*Khai báo vector data kiểu số*/
std::vector<int> data1(3); //{0, 0, 0}
std::vector<double> data2(3); //{0, 0, 0}

Tuy nhiên nếu dùng kiểu chữ như char, string thì các phần tử sẽ có giá trị mặc định bằng Null được biểu diễn bởi trống khi in ra màn hình như sau:

/*Khai báo vector data kiểu chữ*/
std::vector<char> data1(3) //{, , }
std::vector<string> data2(3) //{, , }

Khai báo đồng thời nhiều vector trong C++

Trong trường hợp cần khai báo đồng thời nhiều vector trong C++, chúng ta viết các tên các biến cách nhau bởi dấu phẩy vào đằng sau std::vector với cú pháp sau đây:

using namespace std;
vector<type> name1, name2, name3, ... ;

Ví dụ cụ thể:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<string> name, job, sex;
vector<int> age;
}

Gán vector trong C++

Sau khi đã khai báo vector trong C++, tương tự như với mảng thông thường thì chúng ta có thể tiến hành gán giá trị vào biến vector đó bằng cách truy cập vào từng phần tử trong vector và gán giá trị vào như sau đây:

data[index] = value ;

Trong đó data là tên biến vector, index là vị trí phần tử cần gán giá trị và value là giá trị gán vào phần tử đó.

Ví dụ:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<int> data(3);
data[0]=1;
data[1]=4;
data[2]=88;
}

Ngoài ra, chúng ta cũng có thể sử dụng một số hàm thành viên để gán giá trị, hoặc reset toàn bộ giá trị cho vector trong C++.

  • Xem thêm:

Khởi tạo vector trong C++

Khởi tạo vector trong C++ với các phần tử riêng biệt

Ngoài cách khai báo rồi gán giá trị cho vector thì chúng ta cũng có thể khởi tạo vector và gán luôn giá trị ban đầu cho biến vector đó.

Cú pháp khởi tạo vector trong C++ được thêm vào từ C++11 bằng cách sử dụng cặp dấu ngoặc {} với cú pháp sau đây:

std::vector<type> data {value1, value2, value3, ...};

Trong đó

  • type là kiểu dữ liệu
  • data là tên biến vector
  • value là các giá trị của vector

Ví dụ:

std::vector<string> user{"Kiyoshi", "male", "Tokyo"};
//{"Kiyoshi", "male", "Tokyo"}

Khởi tạo vector trong C++ với các phần tử giống nhau

Chúng ta cũng có thể khởi tạo vector với các phần tử có giá trị giống nhau, với cú pháp sau đây:

std::vector<type> data(length, value);

Trong đó length là số phần tử(độ dài), và value là giá trị sử dụng để khai báo đồng loạt các phần tử của vector cần tạo.

Ví dụ:

//Khởi tạo vector data kiểu int gồm 5 phần tử có giá trị bằng 8
std::vector<int> data(5, 8); //{8, 8, 8, 8, 8}

Khai báo vector 2 chiều trong C++

Giống như mảng thì chúng ta cũng có thể sủ dụng vector đa chiều trong C++, và loại vector đa chiều hay được sử dụng đó chính là vector 2 chiều trong C++.

Để khai báo vector 2 chiều trong C++ cũng như các loại vector đa chiều khác, chúng ta sử dụng tới cú pháp sau đây:

using namespace std;
vector<vector<type> > data {v1, v2, v3, ...};

Trong đó:

  • data là tên biến vector 2 chiều
  • v là các vector 1 chiều được sử dụng như phần tử của vector 2 chiều

Lưu ý, chúng ta cần phải viết thêm dấu cách giữa cặp dấu > > khi khai báo vector 2 chiều. Lý do là để phân biệt với toán tử >> được sử dụng để dịch chuyển bit trong C++.

Ví dụ cụ thể:

#include <iostream>
#include <vector>
using namespace std;

int main()
{

/*Khai báo vector 2 chiều*/
vector<vector<string> > all_user{
{"Kiyoshi", "male", "Hanoi"},
{"Honda", "male", "Tokyo"},
{"Ajinomoto", "female", "Osaka"}};
return 0;
}

Chúng ta cũng có thể khởi tạo các vector 1 chiều trước rồi dùng chúng để khai báo vector 2 chiều như sau:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
/*Khởi tạo các vector 1 chiều làm phần tử trong vector 2 chiều*/
vector<string> user1{"Kiyoshi", "male", "Hanoi"};
vector<string> user2{"Honda", "male", "Tokyo"};
vector<string> user3{"Ajinomoto", "female", "Osaka"};

/*Khai báo vector 2 chiều*/
vector<vector<string> > all_user{ user1, user2, user3};
return 0;
}

Truy cập phần tử trong vector C++

Sau khi khai báo, khởi tạo và gán giá trị cho vector, chúng ta có thể truy cập tới các phần tử trong vector đó thông qua index của phần tử như sau:

data[index];

Trong đó data là tên biến vector và index là vị trí của cần truy xuất.

Ví dụ:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<string> user{"Kiyoshi", "male", "Tokyo"};
cout << user[0] <<endl;
cout << user[1] <<endl;
cout << user[2] <<endl;

return 0;
}

Kết quả:

Kiyoshi
male
Tokyo

Sự khác biệt giữa mảng và vector trong C++

Như đã phân tích ở trên thì sự khác biệt lớn nhất giữa mảng và vector trong C++ đó chính là ở khả năng tự thay đổi kích thước.

Kích thước của mảng là cố định, trong khi đó kích thước của vector là kích thước động, do vậy chúng ta có thể linh hoạt xử lý vector mà không cần phải lo lắng tới việc kích thước của nó có đủ để chứa dữ liệu không, hay có bị xảy ra sự cố tràn bộ nhớ không.

Tổng hợp lại, giữa mảng và vector trong C++ có một số sự khác biệt như sau:

Mảngvector
Mảng tĩnh thừa hưởng từ ngôn ngữ CMảng động được thêm từ C++
Có kích thước cố địnhTự động thay đổi kích thước
Hiệu năng tốt hơn do kích thước cố định trong bộ nhớHiệu năng kém hơn do con trỏ phải tìm để lấy dữ liệu trong các ngăn xếp
Tốc độ nhanh hơn nhưng xử lý bất tiệnXử lý linh hoạt hơn nhưng tốc độ chậm hơn một chút

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về vector trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.