1

尝试对整数集的三维向量使用迭代器时遇到很多错误。请参阅以下代码(这只是选择部分,因为整个事情太长了;我认为这应该足以看出有什么问题,但如果不是,请告诉我):

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] 调用某些东西时,运算符“[]”都不匹配

我觉得错误以某种方式源于迭代器本身,但我无法弄清楚。

4

2 回答 2

2

你想要set<int>::iterator cell_iter;。只需再次仔细查看begin()您正在调用的函数。

在 C++11 中你当然会说

auto cell_iter = particles_celllist[wx][wy][wz].begin()

并且从未注意到这很难:-)

于 2012-08-15T16:54:29.643 回答
2

particles_celllist[wx][wy][wz]是类型的set<int>,所以particles_celllist[wx][wy][wz].begin()是类型的set<int>::iterator

于 2012-08-15T16:54:59.173 回答