> 백엔드 개발 > C++ > C에서 동적 2차원 배열을 구현하는 방법은 무엇입니까?

C에서 동적 2차원 배열을 구현하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-02 18:53:12
원래의
916명이 탐색했습니다.

How to Implement Dynamic Two-Dimensional Arrays in C  ?

사용자 입력을 기반으로 한 동적 2차원 배열

행렬 작업 시 동적 배열의 필요성을 이해하고 이를 달성하기 위한 다양한 접근 방식을 모색합니다. C의 이러한 유연성.

벡터의 벡터 (벡터<벡터>)

행렬을 나타내는 벡터 벡터에는 행 및 열 액세스를 처리하기 위한 사용자 정의 클래스가 필요합니다. 이 방법은 동적 크기 조정 가능한 배열을 허용하지만 중첩 포인터 및 메모리 오버헤드로 인해 비효율성을 초래할 수 있습니다.

매트릭스 래퍼 클래스 템플릿

대체 접근 방식은 단일 벡터를 래핑하는 템플릿 클래스입니다. 래퍼는 행렬 모양을 추적하고 액세스 기능을 제공합니다.

template <class T>
class matrix {
    int columns_;
    std::vector<T> data;

public:
    matrix(int columns, int rows) : columns_(columns), data(columns * rows) {}

    T& operator()(int column, int row) { return data[row * columns_ + column]; }
};
로그인 후 복사

이 클래스는 연산자[] 대신 연산자()를 사용하여 편리한 아래 첨자 액세스를 제공합니다.

오버로딩 연산자[ ] 다차원용

연산자[] 구문 사용을 선호하는 경우 중첩 클래스에서 오버로드할 수 있습니다. 구조:

template<class T, int size>
class matrix3 {
    T data[size][size][size];

    friend class proxy;
    friend class proxy2;

    class proxy {
        matrix3& m_;
        int index1_, index2_;
        public:
        proxy(matrix3& m, int i1, int i2) : m_(m), index1_(i1), index2_(i2) {}
        T& operator[](int index3) { return m_.data[index1_][index2_][index3]; }
    };

    class proxy2 {
        matrix3& m_;
        int index_;
        public:
        proxy2(matrix3& m, int d) : m_(m), index_(d) {}
        proxy operator[](int index2) { return proxy(m_, index_, index2); }
    };

public:
    proxy2 operator[](int index) { return proxy2(*this, index); }
};
로그인 후 복사

이 접근 방식은 C 스타일 매트릭스 액세스를 제공하지만 일부 상용구 코드가 필요할 수 있습니다.

이러한 옵션을 이해하면 작업 시 특정 요구 사항에 가장 적합한 접근 방식을 선택할 수 있습니다. 행렬 맥락에서 동적 2차원 배열을 사용합니다.

위 내용은 C에서 동적 2차원 배열을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿