Class 可能与 main() 中的服务器数据类型一起使用的二维数组模板

Class template for 2 dimension array that might be used with sever data types in main()

我必须为二维数组创建一个 class 模板;数组中的每个变量都会得到一个随机值 [65;90],我需要在数组中找到最大值。但是在 class 中,模板数据类型应该是未指定的,所以稍后我可以在 main().

中将它与任何 - int/char 等一起使用

我已经尝试了几种初始化数组的方法,但是还是不行。现在这是将值放入数组的一部分,第二部分是 print()。

#include <iostream> 
#include <cstdlib>
using namespace std; 
  
template <typename T> 
class Array { 
private: 
    T **ptr; 
public: 
    Array(T arr[7][12]); 
    void print(); 
}; 
  
template <typename T> 
Array<T>::Array(T arr[7][12]) { 
    ptr = new T[7][12]; 
    for(int i = 0; i < 7; i++) {
        for (int j=0;j<12;j++) {
            arr[i][j]=rand()%26+65;
            ptr[i][j]=arr[i][j];
        }
    }
} 
  
template <typename T> 
void Array<T>::print() { 
    for(int i = 0; i < 7; i++) {
        for (int j=0; j<12; j++) {
            cout<<*(ptr+j)<<" ";
        }
        cout<<"\n";
    }
    cout<<endl; 
} 
  
int main() { 
    int arr[7][12];
    Array<int> a(arr[7][12]); 
    a.print(); 
    return 0; 
} 

如果维度在编译时已知并且您可以使用 std::array 那么您不需要动态分配数组:

#include <array>

template <typename T,unsigned M,unsigned N>
struct my_2d_array {
    using row_type = std::array<T,N>;
    std::array< row_type, M> data;
};

如果您由于某些原因无法使用std::array

template <typename T,unsigned M,unsigned N>
struct my_2d_array {
    T data[M][N];
};

这里

int arr[7][12];
Array<int> a(arr[7][12]); 

您声明 arr 的大小为 7x12,然后访问它的边界。最后一个有效元素是 arr[6][11]arr[i][j] 是数组中的单个元素(int)。

我想这就是你想要的

#include <iostream> 
#include <cstdlib>
using namespace std; 
  
template <typename T> 
class Array { 
private: 
    T **ptr; 
public: 
    Array(T arr[][12]); 
    void print(); 
}; 
  
template <typename T> 
Array<T>::Array(T arr[][12]) { 
    ptr = new T *[7];
    for(int i = 0; i < 7; i++) {
        ptr[i] = new T[12];
        for (int j=0;j<12;j++) {
            arr[i][j]=rand()%26+65;
            ptr[i][j]=arr[i][j];
        }
    }
} 
  
template <typename T> 
void Array<T>::print() { 
    for(int i = 0; i < 7; i++) {
        for (int j=0; j<12; j++) {
            cout<<ptr[i][j]<<" ";
        }
        cout<<"\n";
    }
    cout<<endl; 
} 
  
int main() { 
    int arr[7][12];
    Array<int> a(arr); 
    a.print(); 
    return 0; 
} 

这里是传递二维数组的方法 Passing a 2D array to a C++ function