Home >Backend Development >C++ >How to Implement Dynamic Two-Dimensional Arrays in C ?

How to Implement Dynamic Two-Dimensional Arrays in C ?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 18:53:12923browse

How to Implement Dynamic Two-Dimensional Arrays in C  ?

Dynamic Two-Dimensional Arrays Based on User Input

Understanding the need for dynamic arrays when working with matrices, we explore various approaches to achieve this flexibility in C .

Vector of Vectors (vector>)

A vector of vectors, representing a matrix, requires user-defined classes to handle row and column access. While this method allows for dynamic resizable arrays, it can introduce inefficiencies due to nested pointers and memory overhead.

Matrix Wrapper Class Template

An alternative approach is to create a template class that wraps a single vector. The wrapper keeps track of the matrix shape and provides access functions:

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

This class provides convenient subscript access using operator() instead of operator[].

Overloading Operator[] for Multiple Dimensions

For those who prefer using operator[] syntax, it's possible to overload it in a nested class structure:

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

This approach provides C -style matrix access but may require some boilerplate code.

By understanding these options, you can choose the most appropriate approach for your specific requirements when working with dynamic two-dimensional arrays in a matrix context.

The above is the detailed content of How to Implement Dynamic Two-Dimensional Arrays in C ?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn