在許多程式設計場景中,有必要創建其大小在編譯時未知的數組或矩陣 -時間。這帶來了挑戰,因為數組通常具有固定的維度。然而,C 提供了在運行時動態分配記憶體的機制,允許根據使用者輸入建立大小的陣列。
建立動態二維的一種方法陣列是利用向量的向量。這涉及定義一個儲存其他向量的向量,從而有效地創建一個矩陣結構。例如:
std::vector<std::vector<int>> matrix(N);
這將建立一個 N×N 矩陣,其中內部向量中的每個元素代表矩陣中的一個單元格。但是,需要注意的是,每個內部向量都需要單獨調整大小或賦值,與其他方法相比,其記憶體效率較低。
另一種方法方法是建立一個包裝類別來抽象化矩陣表示並處理動態記憶體分配。以下是一個範例:
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]; } };
此類定義了一個T 類型的動態矩陣,其中構造函數分配列數和行數,函數operator() 提供使用直觀的方式存取矩陣元素的方法行和列索引。
另一種技術涉及重載數組下標運算子([])。這允許我們使用熟悉的語法存取矩陣元素:
class Matrix { int columns_; std::vector<T> data; public: Matrix(int columns, int rows) : columns_(columns), data(columns * rows) {} T& operator[](const std::pair<int, int>& indices) { return data[indices.first * columns_ + indices.second]; } };
使用這種方法,我們可以透過以下方式存取矩陣元素:
T& element = matrix[std::make_pair(row, column)];
方法的選擇取決於具體的背景和性能要求。無論是利用向量的向量、包裝類別或運算子重載,這些技術都提供了在 C 中建立和操作動態二維陣列的靈活性。
以上是如何根據使用者輸入在 C 中建立動態大小的二維數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!