사용자 입력을 기반으로 한 동적 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!