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
Iphả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ùngat()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ách | Cú pháp | Kiểm tra biên | Index runtime? | Ghi chú |
|---|---|---|---|---|
| operator[] | arr[i] | Không | Có | Nhanh nhất |
| at() | arr.at(i) | Có (throw) | Có | An toàn |
| get<I>() | get<I>(arr) | Không | Khô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).