Làm việc với danh sách với vector trong lập trình c++

Trong bài viết này, Stanford - Dạy lập trình sẽ giúp các bạn học lập trình c++ làm việc với mảng động hay danh sách sử dụng vector qua những ví dụ cụ thể.

Trong quá trình học lập trình c++ cũng như làm việc thực tế thường xuyên bạn có nhu cầu sử dụng một mảng động hay danh sách có số lượng phần tử thay đổi, kích thước không cố định. Để làm việc đó trong lập trình c++ chúng ta sử dụng thư viện vector được cung cấp trong c++.

Vector: Là một kiểu mảng động trong lập trình c++. Số lượng phần tử có thể thay đổi tùy theo mục đích sử dụng của người dùng

Đặc điểm chính của vector

  • Kích thước động: Các vector tự động thay đổi kích thước khi bạn thêm hoặc xóa các phần tử. Tính linh hoạt này là một trong những lý do chính khiến vector được ưa chuộng hơn mảng cố định trong nhiều tình huống.
  • Truy cập hiệu quả: Vì các phần tử vector được lưu trữ ở các vị trí bộ nhớ liền kề nên bạn có thể truy cập các phần tử theo thời gian không đổi bằng cách sử dụng chỉ mục của chúng, tương tự như mảng.
  • Chèn và xóa: Việc chèn các phần tử thường được thực hiện ở cuối vector. Còn việc chèn hoặc xóa các phần tử ở đầu hoặc giữa vectơ mất thời gian tuyến tính do cần phải dịch chuyển các phần tử.

Cú pháp khai báo Vector trong C++

std::vector <Kiểu dữ liệu> Tên vector;

trong đó kiểu dữ liệu là kiểu dữ liệu của từng phần tử của vector. Bạn có thể xóa std:: nếu bạn đã sử dụng không gian tên std.

Khởi tạo Vector trong C++

Chúng ta có thể khởi tạo một vectơ theo những cách sau:
1. Khởi tạo sử dụng List
Khởi tạo này được thực hiện bằng một khai báo. Ở đây, chúng ta truyền danh sách các phần tử cho hàm tạo vector để tạo một vector với các phần tử được chỉ định.

vector <dataType> tên({ giá trị 1, giá trị 2, giá trị 3 .... });
 
Ví dụ:
vector<int> vec{3, 5};
2. Khởi tạo với một giá trị duy nhất
Việc khởi tạo này cũng được thực hiện bằng khai báo. Ở đây, chúng ta chỉ định kích thước của vector và sau đó khởi tạo mọi phần tử của vector bằng giá trị.

vector <dataType> tên(kích thước, giá trị);
 
Ví dụ: Khai báo danh sách 3 phần tử với giá trị mỗi phần tử là 1
vector<int> vec4(3, 1);
3. Khởi tạo từ một vector khác
Khởi tạo này được sử dụng để tạo một vector là bản sao chính xác của một vector khác

vector <dataType> tên(other_vec);
 
Ví dụ:
vector<int> vec1 = { 1, 2, 5, 6, 8 };
vector<int> vec2(vec1);

Các hàm hay sử dụng trong vector

Sau đây là mô tả và cách thức sử dụng các hàm hay dùng trong vector như sau:

  • push_back(value): Để thêm một giá trị vào 1 vector
  • size(): Trả về số lượng các phần tử trong vector
  • empty(): Trả về true nếu danh sách rỗng
  • front(): Hàm trả về giá trị đầu tiên trong danh sách
  • back(): Hàm trả về giá trị cuối cùng trong danh sách
  • at(pos): Hàm trả về giá trị của phần tử theo vị trí trong danh sách
  • data(): Hàm trả về dữ liệu danh sách về dạng con trỏ
  • begin(): Hàm trỏ về vị trí đầu tiên của danh sách
  • end(): Hàm trỏ về vị trí cuối của danh sách
  • rbegin(): Hàm trả về con trỏ về vị trí cuối trong danh sách
  • rend(): Hàm trả về con trỏ vị trí đầu trong danh sách
  • cbegin(): Hàm trả về hằng số con trỏ vị trí đầu trong danh sách
  • cend(): Hàm trả về hằng số con trỏ vị trí đầu trong danh sách
  • assign(n, m): Tạo danh sách gồm n phần tử với giá trị m trong vector
  • pop_back(): Xóa phần tử cuối trong danh sách
  • insert(): Chèn 1 giá trị vào vị trí con trỏ nào đó trong danh sách
  • erase(): Xóa phần tử trong danh sách
  • swap(): Hàm thực hiện hoán đổi 2 danh sách vector cùng kiểu
  • clear(): Xóa các phần tử trong danh sách
  • emplace(): Thêm phần tử vào vị trí nào đó trong danh sách
  • emplace_back(): Thêm phần tử vào cuối danh sách

Ví dụ 1: Sử dụng các hàm trong Vector

//Khai báo 1 vector
vector<int> vec;
 
//Thêm giá trị
vec.push_back(3);
vec.push_back(5);
vec.push_back(7);
cout << "So luong phan tu: " << vec.size() << endl;
cout << "Phan tu dau: " << vec.front() << endl;
cout << "Phan tu cuoi: " << vec.back() << endl;
cout << "Phan tu o vi tri thu 2 la: " << vec.at(1) << endl;
 
//Di chuyển trỏ về vị trí đầu rồi thêm số 8
vec.insert(vec.begin(), 8);
 
//Tạo danh sách 4 phần tử với các giá trị 5
vec.assign(4, 5);
 
//Xóa phần tử cuối
vec.pop_back();
 
//Chèn vào vị trí con trỏ đầu của vector giá trị 6
vec.emplace(vec.begin(), 6);
 
//Chèn vào phần tử cuối danh sách
vec.emplace_back(10);
 
//Xóa phần tử ở vị trí đầu
vec.erase(vec.begin());
 
cout << "Cac phan tu: " << endl;
 
for (auto i = vec.begin(); i != vec.end(); ++i)
{
    cout << *i << endl;
}

Ví dụ 2: Sử dụng các hàm trong Vector

//Xóa tất cả các phần tử
vec.clear();
 
vector<int> vec4 = { 1, 2 };
 
vector<int> vec5 = { 3, 4 };
 
//Hoán đổi
vec4.swap(vec5);
 
cout << "Danh sach cac phan tu trong vec 4: " << endl;
 
for (const int& i : vec4)
{
    cout << i << endl;
}
 
cout << "Danh sach cac phan tu trong vec 5: " << endl;
 
for (const int& i : vec5)
{
    cout << i << endl;
}

Để thực hành các bạn học lập trình c++ có thể viết code xử lý như từng ví dụ trong bài viết hướng dẫn. Hy vọng qua bài viết này đã giúp các bạn học lập trình c++ hiểu rõ hơn về mảng động sử dụng vector, cách thức khai báo và sử dụng các hàm trong vector một cách hiệu quả.

Bên cạnh đó nếu bạn đang muốn được đào tạo bài bản từ cơ bản đến nâng cao về lập trình c++ có thể tham gia ngay khóa học lập trình c++ cùng chuyên gia giàu kinh nghiệm Stanford tại đây: http://bit.ly/2SLPYFF và nhận ưu đãi hấp dẫn của Stanford trong thời gian này. Bạn có thể gọi theo hotline: 0963 723 236 - 0866 586 366 để được gọi lại tư vấn trực tiếp nhé.

=============================
☎ STANFORD – ĐÀO TẠO VÀ PHÁT TRIỂN CÔNG NGHỆ
Hotline: 0963 723 236 - 0866 586 366
Website: https://stanford.com.vn
Facebook: http://bit.ly/2FN0TYb
Youtube: http://bit.ly/2TkKT7I

Tags: sử dụng vector, mảng động c++, học lập trình c++