元素訪問

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;
}