我在尝试使用迭代器来处理整数组的三维向量时遇到了很多错误。看下面的代码(这只是选择的部分,因为整个事情太长了;我认为这应该足以看出什么是错的,但如果不是,请告诉我):
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返回双精度。
我收到了很多错误:
不匹配运算符“=”in “cell_iter = particles_celllist [WX] [WY] [WZ] .begin()”
不匹配运营商“!=”in “cell_iter!= particles_celllist [WX] [WY] [WZ] .end关于()”
每当我使用[* cell_iter]来调用时,不匹配运算符“[]” 东西
我感觉这个错误在某种程度上源于迭代器本身,但我无法弄明白。
答案 0 :(得分:2)
你想要set<int>::iterator cell_iter;
。再仔细看看你正在调用的begin()
函数。
在C ++ 11中,你当然只是说了
auto cell_iter = particles_celllist[wx][wy][wz].begin()
并且从未注意到这很难: - )
答案 1 :(得分:2)
particles_celllist[wx][wy][wz]
的类型为set<int>
,因此particles_celllist[wx][wy][wz].begin()
的类型为set<int>::iterator