2016-11-07 3 views
0

渡される内容に応じて配列の名前を付ける方法を教えてください。これまでのところ:関数内で渡されるものに依存する配列の名前を付けます。

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

' FOO =新しいダブル* [行]?実際の名前_はどういう意味ですか? – ForceBru

+0

実際には、行列をダブルポインタとして保存しないでください。 'std :: map >'を使うことができ、 'string'部分が名前になり、' vector'が行列をフラットな配列にする。 – NathanOliver

+0

名前で、あなたはコードを読んでいる人が参照する名前を意味しますか? –

答えて

0

最初に、低レベルのものを実行するまで、ダイナミックアレイを直接使用しないでください。標準的なライブラリが美しい容器でいっぱいです。それらを最大限に活用するようにしてください。


私の推測が正しければ、あなたのようなものがあります。これはだった場合

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); 
} 

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]; 
    } 
} 

をあなたはメンバ変数の型へのポインタと呼ばれるもので、あなたの問題を解決することができます私はあなたが悪いデザインをしていると思うし、あなたはそれを変更することを考える必要があるかもしれません。


代替、より現実的な解決策: `

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); 
} 
+0

matrixA、matrixB、およびmatrixCがプライベートとして定義されていた場合、これはどのようにレイアウトされますか? – loxol

+0

メンバでないメンバゲッタをconstにする..私は推測する –

関連する問題