수색…


매개 변수

매개 변수 정의
class T 배열 구성원의 데이터 형식을 지정합니다.
std::size_t N 배열의 멤버 수를 지정합니다.

비고

std::array 하려면 #include <array> 사용하여 <array> 헤더를 포함시켜야합니다.

std :: array 초기화하기

std::array<T, N> 초기화. 여기서 T 는 스칼라 유형이고 NT 유형의 요소 수입니다.

T 가 스칼라 유형이면 다음과 같은 방법으로 std::array 를 초기화 할 수 있습니다.

// 1) Using aggregate-initialization
std::array<int, 3> a{ 0, 1, 2 };
// or equivalently
std::array<int, 3> a = { 0, 1, 2 };

// 2) Using the copy constructor
std::array<int, 3> a{ 0, 1, 2 };
std::array<int, 3> a2(a);
// or equivalently
std::array<int, 3> a2 = a;

// 3) Using the move constructor
std::array<int, 3> a = std::array<int, 3>{ 0, 1, 2 };

std::array<T, N> 초기화. 여기서 T 는 비 스칼라 유형이고 NT 유형의 요소 수입니다.

T 가 비 스칼라 유형이면 std::array 는 다음과 같은 방법으로 초기화 될 수 있습니다.

struct A { int values[3]; }; // An aggregate type

// 1) Using aggregate initialization with brace elision
// It works only if T is an aggregate type!
std::array<A, 2> a{ 0, 1, 2, 3, 4, 5 };
// or equivalently
std::array<A, 2> a = { 0, 1, 2, 3, 4, 5 };

// 2) Using aggregate initialization with brace initialization of sub-elements
std::array<A, 2> a{ A{ 0, 1, 2 }, A{ 3, 4, 5 } };
// or equivalently
std::array<A, 2> a = { A{ 0, 1, 2 }, A{ 3, 4, 5 } };

// 3)
std::array<A, 2> a{{ { 0, 1, 2 }, { 3, 4, 5 } }};
// or equivalently
std::array<A, 2> a = {{ { 0, 1, 2 }, { 3, 4, 5 } }};

// 4) Using the copy constructor
std::array<A, 2> a{ 1, 2, 3 };
std::array<A, 2> a2(a);
// or equivalently
std::array<A, 2> a2 = a;

// 5) Using the move constructor
std::array<A, 2> a = std::array<A, 2>{ 0, 1, 2, 3, 4, 5 };

요소 액세스

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()) 컨테이너가 비어 있어도 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;
}

배열 크기 확인

std::array 의 주된 장점 중 하나는 C 스타일 std::array 과 비교하여 size() 멤버 함수를 사용하여 배열의 크기를 확인할 수 있다는 것입니다

int main() {
    std::array<int, 3> arr = { 1, 2, 3 };
    cout << arr.size() << endl;
}

배열 반복

std::array 는 STL 컨테이너이므로 vector 와 같은 다른 컨테이너와 비슷한 루프에 대해 범위 기반을 사용할 수 있습니다.

int main() {
     std::array<int, 3> arr = { 1, 2, 3 };
     for (auto i : arr)
         cout << i << '\n';
}

한 번에 모든 배열 요소 변경

멤버 함수 fill() 은 초기화 후 즉시 값을 변경하기 위해 std::array 에서 사용할 수 있습니다.

int main() {
    
    std::array<int, 3> arr = { 1, 2, 3 };
    // change all elements of the array to 100
    arr.fill(100);
    
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow