כן אבל לדעתי לא כפי שאתה הראית
וקטור יחזוך את ההתעסקות המיותרת (לרוב) עם הקצאה ושחרור זכרון, אבל עדיף תמיד לעבוד עם מערך חד מימדי ולעשות חישוב אינדקסים. זה פשוט יותר וזה טבעי יותר. הדוגמא הבאה תבהיר:
#include <vector> template <typename T> class Matrix : private std::vector<T> { public: // ctor (No need for destructor) // Matrix(int r, int c) : row(r), col(c), std::vector<T>(r * c) {} // Matrix dimensions // int max_row() const { return row; } int max_col() const { return col; } // Fortran like element access (for assignment) // T& operator()(int r, int c) { return (*this)[r * max_col() + c]; } const T& operator()(int r, int c) const { return (*this)[r * max_col() + c]; } private: int row; int col; };
ירושה פרטית מלמדת שיורש את המימוש אבל לא את המימשק. היה אפשר לעשות זאת גם עם member vector וללא ירושה. שים לב שהשמה וקריאת ערכים ע"י אופרטורים יותר טבעיים (מבחינה מתימטית). הנה קוד לדוגמא שמשתמש במטריצה הזאת.
// test // #include <iostream> int main() { using namespace std; Matrix<int> matrix(3, 3); // Element assignment. // matrix(1, 1) = 15; // Fetch element // cout << matrix(1, 1) << endl; }