[STL] Giới thiệu std::array trong lập trình C++

Array

std::array là 1 sequence container của STL trong C++,  nó được định nghĩa trong header <array>.

template < class T, size_t N > class array;

Trong đó :

class T : là kiểu dữ liệu của các phần tử.

size_t N : số phần tử.

Ví dụ:


//Khai báo mảng int có 5 phần tử

sdt::array<int, 5> arr;

class Person

{

   string name;

   int age;

   string address;

}

//Khai báo mảng có 10 phần tử

// Mỗi phần tử của mảng có kiểu Person

std::array<Person, 10> Persons;

std::array là mảng tĩnh chứa các phần tử được sắp xếp theo trình tự tuyến tính. Ta không thể thay đổi kích thước của aray.

Các đặc điểm của std::array

  • Các phần tử được sắp xếp theo trình tự tuyến tính, ta có thể truy cập các phần tử thông qua chỉ số của chúng.
Phần tử thứ nhất có chỉ số : 0

Phần tử thứ hai có chỉ số : 1

...............................

Phần tử thứ n có chỉ số : n - 1
  • Các phần tử được lưu trữ trong khối bộ nhớ liền kề nhau.
  • Kích thước của array không thể thay đổi, ta phải khai báo số phần tử của array khi khai báo biến.

Các hàm của class std::array

Hàm về Iterator

Tên hàmChức năng
beginTrả về iterator trỏ vào phần tử đầu tiên
endTrả về iterator trỏ vào phần tử cuối cùng
cbeginTrả về const_iterator trỏ vào phần tử đầu tiên
cendTrả về const_iterator trỏ vào phần tử cuối cùng
rbeginTrả về iterator trỏ vào phần tử đầu tiên của containers bị đảo ngược
rendTrả về iterator trỏ vào phần tử cuối cùng của containers bị đảo ngược
rcbeginTrả về const_iterator trỏ vào phần tử đầu tiên của containers bị đảo ngược
rcendTrả về const_iterator trỏ vào phần tử cuối cùng của containers bị đảo ngược

Ta có thể giải thích về 2 hàm begin / rbegin như sau

Ta có mảng arr gồm 5 phần tử kiểu int

  std::array<int, 5> arr = {2, 4, 6, 8, 10};

Mảng reverse_arr là mảng đảo ngược của arr :

reverse_arr  =  { 10, 8, 6, 4, 2};

Khi đó arr.rbegin sẽ giống với reverse_arr.begin

Hàm về capacity

Tên hàmChức năng
sizeTrả về kích thước ( số phần tử) của mảng.
max_sizeTrả về kích thước ( số phần tử) lớn nhất của mảng.
emptyKiểm tra mảng có rỗng không ( số phần tử = 0).

Với array thì max_sizesize có giá trị bằng nhau.

Hàm về truy cập các phần tử.

Tên hàmChức năng
operator[]Truy cập phần từ của mảng theo index arr[i].
atTruy cập phần tử của mảng theo index arr.at(i).
frontTruy cập phần tử đầu tiên của mảng.
endTruy cập phần tử cuối cùng của mảng.
dataTrả về con trỏ đại diện cho mảng.

Hàm thay đổi giá trị array

Tên hàmChức năng
fillGán tất cả các phần tử của mảng 1 giá trị nào đó.
swapChuyển đổi nội dung giữa 2 mảng, 2 mảng phải có cùng kiểu dữ liệu và cùng số phần tử.

Ví dụ :


#include <iostream>

#include <array>

using namespace std;

int main()

{

   //Khai báo mảng int có 5 phần tử
   array<int, 5> arr1;

   //gán tất cả các phần tử của arr có giá trị 10
   arr1.fill(10);

   //Duyệt mảng sử dụng iterators

   cout << "arr1 = ";

   for (auto it = arr1.begin(); it != arr1.end(); it++)

   {

      cout << *it << " ";

   }

   //Khai báo mảng thứ 2 có 5 phần tử kiểu int
   array<int, 5> arr2 = { 1, 3, 5, 7, 9 };

   //Duyệt mảng sử dụng iterators

   cout << endl << "arr2 = ";

   for (auto it = arr2.begin(); it != arr2.end(); it++)

   {

      cout << *it << " ";

   }

   //Đổi giá trị 2 mảng
   arr1.swap(arr2);

   //Duyệt mảng sau khi swap sử dụng iterators

   cout << endl << "After swap : " << endl << "arr1 = ";

   for (auto it = arr1.begin(); it != arr1.end(); it++)

   {

      cout << *it << " ";

   }

   //Duyệt mảng sau khi swap sử dụng iterators

   cout << endl << "arr2 = ";

   for (auto it = arr2.begin(); it != arr2.end(); it++)

   {

      cout << *it << " ";

   }

   return 0;

}

Kết quả:

arr1 = 10 10 10 10 10

arr2 = 1 3 5 7 9

After swap :

arr1 = 1 3 5 7 9

arr2 = 10 10 10 10 10

Was this article helpful?

Leave A Comment?