元素訪問
1. at(pos)
返回對 pos
位置元素的引用,並使用邊界檢查。如果 pos
不在容器的範圍內,則丟擲 std::out_of_range
型別的例外。
複雜性是常數 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr;
// write values
arr.at(0) = 2;
arr.at(1) = 4;
arr.at(2) = 6;
// read values
int a = arr.at(0); // a is now 2
int b = arr.at(1); // b is now 4
int c = arr.at(2); // c is now 6
return 0;
}
2)operator[pos]
返回對 pos
位置的元素的引用,不進行邊界檢查。如果 pos
不在容器的範圍內,則可能發生執行時分段違規錯誤。此方法提供與經典陣列等效的元素訪問,並且比 at(pos)
更有效。
複雜性是常數 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr;
// write values
arr[0] = 2;
arr[1] = 4;
arr[2] = 6;
// read values
int a = arr[0]; // a is now 2
int b = arr[1]; // b is now 4
int c = arr[2]; // c is now 6
return 0;
}
3)std::get<pos>
此非成員函式返回對編譯時常量位置 pos
的元素的引用,而不進行邊界檢查。如果 pos
不在容器範圍內,則可能發生執行時分段違例錯誤。
複雜性是常數 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr;
// write values
std::get<0>(arr) = 2;
std::get<1>(arr) = 4;
std::get<2>(arr) = 6;
// read values
int a = std::get<0>(arr); // a is now 2
int b = std::get<1>(arr); // b is now 4
int c = std::get<2>(arr); // c is now 6
return 0;
}
4)front()
返回對容器中第一個元素的引用。在空容器上呼叫 front()
是不確定的。
複雜性是常數 O(1)
。
注意: 對於容器 c,表示式 c.front()
相當於*c.begin()
。
#include <array>
int main()
{
std::array<int, 3> arr{ 2, 4, 6 };
int a = arr.front(); // a is now 2
return 0;
}
5)back()
返回對容器中最後一個元素的引用。在空容器上呼叫 back()
是未定義的。
複雜性是常數 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr{ 2, 4, 6 };
int a = arr.back(); // a is now 6
return 0;
}
6)data()
返回指向用作元素儲存的基礎陣列的指標。指標使得 range [data(); data() + size())
始終是有效範圍,即使容器為空(在這種情況下 data()
不可解除引用)。
複雜性是常數 O(1)
。
#include <iostream>
#include <cstring>
#include <array>
int main ()
{
const char* cstr = "Test string";
std::array<char, 12> arr;
std::memcpy(arr.data(), cstr, 12); // copy cstr to arr
std::cout << arr.data(); // outputs: Test string
return 0;
}