模板函數std::get<n>()是一個輔助函數,它能夠獲取到容器的第 n 個元素。模板參數的實參必須是一個在編譯時可以確定的常量表達式,編譯時會對它檢查。
get<n>()模板提供了一種不需要在運行時檢查,但能用安全的索引值訪問元素的方法。
在std::array中,提供了2種訪問元素的方法:[]和at()
1 #include <iostream> 2 #include <array> 3 4 int main() 5 { 6 std::array<int, 5> arr {1, 2, 3, 4, 5}; 7 std::cout << "5th element is : " << arr[5] << std::endl; 8 return 0; 9 }
[]不會檢查索引值是否越界,一旦越界將會有未定義的結果(crash或未知的值)
1 #include <iostream> 2 #include <array> 3 4 int main() 5 { 6 std::array<int, 5> arr {1, 2, 3, 4, 5}; 7 std::cout << "5th element is : " << arr.at(5) << std::endl; 8 return 0; 9 }
at()會檢查,一旦越界,將拋出std::out_of_range的異常
terminate called after throwing an instance of 'std::out_of_range' what(): array::at: __n (which is 5) >= _Nm (which is 5) Aborted (core dumped)
注:實際上,在頭文件 <array> 中,通過重載全局函數 std::get 使得通過 std::get 訪問 array 中的元素時,array 容器就像一個多元組。
template<size_t I, class T, size_t N > T& get( array<T,N>& a ); |
(1) | (C++11 起) |
template<size_t I, class T, size_t N > T&& get( array<T,N>&& a ); |
(2) | (C++11 起) |
template<size_t I, class T, size_t N > const T& get( const array<T,N>& a ); |
(3) | (C++11 起) |
從數組中提取Ithelement元素.
I[0, N)范圍內的值必須是一個整數。這是在編譯時執行,而不是at()或operator[]().