0

基本クラスOrganismがあり、AntとDoodlebugの2つの派生クラスがあります。これは、捕食者と被食者の問題のためのものです。Baseクラスタイプの2Dベクトルが必要ですが、派生クラスの要素を割り当てることができます。これは、20 X 20の文字コード表で世界の状態を表すという考え方です。要素がベースの場合、文字は''ですが、要素が派生している場合は、別の文字になります。

1次元ベクトルの場合の方法について読みましたが、2次元ベクトルへのポインターを宣言する適切な構文が見つかりませんでした。これが私が持っているものです、私が入れようとするとエラーが発生しました:

vector < vector<Organism*> > state(20, vector<Organism*>(20));

しかし、これはコンパイルされますが、文字の代わりに数字のフィールドを出力します。

vector < vector<Organism> > state(20, vector<Organism>(20));
string line;
int stateline = 0;

while(getline(ini_state_file, line))
{
    for(int i = 0; i < line.size(); i++)
    {
        if(line[i] == 'o')
            state[stateline][i] = Ant();
        else if(line[i] == 'X')
            state[stateline][i] = Doodlebug();
    }
    stateline++;
}
4

1 に答える 1

5
// or some smart_ptr instead native pointer.
vector<vector<Organism*> > state(20, vector<Organism*>(20));
string line;
int stateline = 0;

while(getline(ini_state_file, line))
{
    for(int i = 0; i < line.size(); i++)
    {
        if(line[i] == 'o')
            state[stateline][i] = new Ant();
        else if(line[i] == 'X')
            state[stateline][i] = new Doodlebug();
    }
    stateline++;
}

メモリを解放することを忘れないでください。このベクトルでの作業が終了するときは、たとえばメモリを解放する必要があります。

for (int i = 0; i < state.size(); ++i)
{
    for (int j = 0; j < state[i].size(); ++j)
    {
        delete state[i][j];
    }
}

または、インデックスの代わりにfor_eachとしてイテレータまたはアルゴリズムを使用します。
スマートポインタを使用したい場合は、メモリを解放しないでください。

于 2012-07-10T16:32:39.533 に答える