vector<pair<int,int>> *for_column_index = new vector<pair<int,int>>[m_number_of_model_points] ; // Why can not use the point form???
//vector<pair<int,int>> *for_column_index = new vector<pair<int,int>>[m_number_of_model_points + 100] ; // also ok
//vector<pair<int,int>> *for_column_index = new vector<pair<int,int>>[m_number_of_model_points - 10] ; // also ok
// vector<pair<int,int>> *it4 = for_column_index + m_number_of_model_points;
//for(int i=0;i<m_number_of_model_points;i++)
//{
// //it3 = for_column_index->begin();
// //it3->first = 0;it3->second = 0; // Intialization, you can do such assignment, oh,my god, you should use the push operator
// // the above is only for getting or printing the value not assignment
// // it3++;
// for_column_index->push_back(pair<int,int>(i,i)); // Initialization by using push operator ,个人觉得不需要初始化了。
//}
/*vector<pair<int,int>>::iterator it3 = for_column_index->begin();
for(it3; it3<for_column_index->end();it3++)
{
cout<<" "<<it3->first<<" "<<it3->second<<" ";
}*/
arr,for_column_index,maxNeighborNum);
// It is wrong, due to the address of for_column_index have changed
//vector<pair<int,int>>::iterator it5 = it3;
//for(it5;it5<for_column_index->end();it5++)
//{
// cout<<" "<<it5->first<<" "<<it5->second<<" "; // These are wrong values
//}
// you can do like this
/*for(vector<pair<int,int>>::iterator it4 = for_column_index->begin();it4<for_column_index->end();it4++)
{
cout<<" "<<it4->first<<" "<<it4->second<<" ";
}*/
这里想要说明的是vector<pair<int,int>> *for_column_index = new vector<pair<int,int>>[m_number_of_model_points] ; 这种类型的指针
new之后不需要进行push之类的初始化操作,不像通常的一维或者2维数组那样初始化。 我觉得应该是这样,但是没有完全理解。
最好还是采用向量的引用来作为参数传递,这样就可以比较好的使用iterator操作了。
vector<pair<int,int>> *for_column_index = new vector<pair<int,int>>[m_number_of_model_points] ;
向量这种类型的指针不像通常的一维array(在定义的时候new出来的那段内存大小就不变了),这个时候可以随便new大小,不影响最终指向的内存区域,但是必须在定义的时候new下,防止成为野指针。我靠,不搞了,这个都花了我1个小时了,这个水有点小深。