繁体   English   中英

c ++ stl迭代器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM