std::array中的std::get ()


模板函數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[]().


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM