我将如何根据传递给它的内容命名数组。到目前为止,我有:
void FileIO::createMatrix(int rows, int cols)
{
name = new double*[rows];
for (int i = 0; i < rows; i++)
{
name[i] = new double[cols];
}
}
如何用实际名称替换name
?所以我可以通过轻松调用这个方法来创建许多数组?
那么,我可以创建一个名为name
的数组,而不是创建一个名为foo
的数组吗?
答案 0 :(得分:0)
首先,请尽量不要直接使用动态数组,直到你做的事情如此低级......标准库充满了可爱的容器。尽量善用它们。
如果我的猜测是对的,你可以这样:
class FileIO{
.....
double** MatrixA;
double** MatrixB;
double** MatrixC;
}
void FileIO::createMatrix(int rows, int cols){
name = new double*[rows];
for (int i = 0; i < rows; i++){
name[i] = new double[cols];
}
}
您可以通过名为成员变量类型的指针来解决您的问题:
class FileIO{
public:
double** MatrixA;
double** MatrixB;
double** MatrixC;
void createMatrix(int rows, int cols, double** FileIO::* member_varaible){
this->*member_varaible= new double*[rows];
for (int i = 0; i < rows; i++){
(this->*member_varaible)[i] = new double[cols];
}
}
};
int main(){
FileIO fio;
fio.createMatrix(5,5,&FileIO::MatrixA);
fio.createMatrix(2,4,&FileIO::MatrixB);
fio.createMatrix(4,3,&FileIO::MatrixC);
}
如果是这种情况,我认为你的设计很糟糕,你可能需要考虑改变它。
替代性和更现实的解决方案:
namespace my_utility{
template <typename T>
T** create_2d_dynamic_array(int rows, int cols){
T** temp = new T*[rows];
for (size_t i = 0; i < rows; i++){
temp[i] = new T[cols];
}
return result;
}
}
int main(){
auto foo = my_utility::create_2d_dynamic_array<double>(5,5);
}