[英]c++ stl iterators
我試圖使用迭代器來處理整數組的三維向量時遇到很多錯誤。 看下面的代碼(這只是選擇的部分,因為整個事情太長了;我認為這應該足以看出什么是錯的,但如果不是,請告訴我):
vector<vector<vector<set<int> > > > particles_celllist;
vector<vector<vector<set<int> > > >::iterator cell_iter;
map<int,map<int,Particle> > particle_grid;
for (cell_iter=particles_celllist[wx][wy][wz].begin();cell_iter!=particles_celllist[wx][wy][wz].end();cell_iter++)
{
double distance_to_cell=sqrt(pow(particles[*cell_iter].position().y()-(wy)*ygridlength,2)+
pow(particles[*cell_iter].position().z()-(wz)*zgridlength,2));
if (distance_to_cell<input_data.diam_large())
{
particle_grid[box_counter][*cell_iter]=particles[*cell_iter];
}
}
注意:wx,wy,wz和box_counter是整數,ygridlength和zgridlength是雙精度,而Particle :: position :: y(或:: z)和input_data :: diam_large返回雙精度數。
我收到了很多錯誤:
“cell_iter = particles_celllist [wx] [wy] [wz] .begin()”中的運算符“=”不匹配
“cell_iter!= particles_celllist [wx] [wy] [wz] .end()”中的運算符“!=”不匹配
每當我使用[* cell_iter]來調用某些東西時,都不匹配運算符“[]”
我得到的感覺就像錯誤以某種方式源於迭代器本身,但我無法弄明白。
你想要set<int>::iterator cell_iter;
。 再仔細看看你正在調用的begin()
函數。
在C ++ 11中,你當然會說
auto cell_iter = particles_celllist[wx][wy][wz].begin()
從來沒有注意到這很難:-)
particles_celllist[wx][wy][wz]
的類型為set<int>
,因此particles_celllist[wx][wy][wz].begin()
的類型為set<int>::iterator
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.