我必须为二维数组创建一个类模板;数组中的每个变量都会得到一个随机值[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++函数