Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm get() của array trong C++ STL

Hàm get<I>(array_name) trong C++ STL dùng để truy xuất phần tử thứ I (0-based index) của std::array. Đây là function template (không phải member function).

Cú pháp

get<I>(array_name)
  • I: chỉ số (phải là compile-time constant).
  • array_name: đối tượng std::array.
  • Trả về reference đến phần tử thứ I (có thể đọc/ghi).

Ví dụ

#include <iostream>
#include <array>
#include <tuple> // Cần cho std::get
using namespace std;

int main() {
    array<int, 10> arr = {0, 11, 22, 33, 44, 55, 66, 77, 88, 99};
    
    cout << "Phan tu 1 (index 0): " << get<0>(arr) << endl;
    cout << "Phan tu 6 (index 5): " << get<5>(arr) << endl;
    cout << "Phan tu 8 (index 7): " << get<7>(arr) << endl;
    cout << "Phan tu 10 (index 9): " << get<9>(arr) << endl;
    
    // Cũng có thể dùng để GÁN giá trị
    get<0>(arr) = 100;
    cout << "Sau khi gan arr[0]=100: " << get<0>(arr) << endl;
    
    return 0;
}

Kết quả

Phan tu 1 (index 0): 0
Phan tu 6 (index 5): 55
Phan tu 8 (index 7): 77
Phan tu 10 (index 9): 99
Sau khi gan arr[0]=100: 100

Đặc điểm quan trọng

  • I phải là compile-time constant (template parameter). Không thể dùng biến runtime: get<i>(arr) lỗi nếu i là biến.
  • Trả về reference → có thể gán giá trị: get<2>(arr) = 999;
  • Kiểm tra biên (bounds checking) không thực hiện tại runtime (giống operator[]). Dùng at() nếu cần an toàn.
  • Hoạt động với cả std::tuple, std::pair (cùng namespace std).

So sánh các cách truy xuất

CáchCú phápKiểm tra biênIndex runtime?Ghi chú
operator[]arr[i]KhôngCóNhanh nhất
at()arr.at(i)Có (throw)CóAn toàn
get<I>()get<I>(arr)KhôngKhông (compile-time)Generic, dùng cho tuple/array

Ứng dụng thực tế

Dùng trong template metaprogramming, generic code xử lý tuple/array đồng nhất, hoặc khi index biết tại compile-time (unroll loop, static assertions).