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



我必须为二维数组创建一个类模板;数组中的每个变量都会得到一个随机值[65;90],我需要在数组中找到MAX值。但在类模板中,数据类型应该是未指定的,所以以后我可以将它与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; 
} 

以下是传递2D数组的方法将2D数组传递给C++函数

相关内容

  • 没有找到相关文章

最新更新