渡される引数class Rock
はvector<vector<unsigned int> >
population
と定義されている:
const std::vector<std::vector<unsigned int> > * population;
コンストラクターの場合:
Rock::Rock ( const vector<vector<unsigned int> > & v):
population (&v)
{
cout << "constructor: population.size: " << population->size() << " population[0].size: " << (*population)[0].size() <\
< endl;
}
印刷するもの:
constructor: population.size: 500 population[0].size: 4
その後、コンストラクターの後に呼び出される次のメンバー関数で:
population.size(): 500 population[0].size() 18446744073709533580
私が思ったのは、渡されpopulation
たのアドレスのコピーを保持し、クラスメンバー関数全体でそれを保持するということです。しかし、それはその二次要素を見失っているようです。vector
Rock
これの何が問題になっていますか?どうすればこれを修正できますか?population
変数のタイプを変更する必要はありません。変更しないと、後続のコードも調整する必要があります。
編集0:コンストラクターの完全なコード:
Rock::Rock ( const vector<vector<unsigned int> > & v, const map<unsigned int, AttType>& m, string f ) :
// Default values for Rock parameters.
population (&v),
att_type ( m ),
initial_pos (75000),
population_size (500),
sample_size (200),
theta (0.2),
nr_clusters (4),
max_dif (500),
label_as ("neighbors"),
debug (false)
{
resetBestPair();
worst_pair.p1 = __INT_MAX__;
worst_pair.p2 = __INT_MAX__;
worst_pair.goodness = __DBL_MIN__;
cfg_file = f;
parseConfig ();
cout << "constructor: population.size: " << population->size() << " population[0].size: " << (*population)[0].size() <\
< endl;
}