1

int のセットの 3 次元ベクトルにイテレータを使用しようとすると、多くのエラーが発生します。次のコードを参照してください (全体が長すぎるため、一部を選択しただけです。何が問題なのかを確認するにはこれで十分だと思いますが、そうでない場合はお知らせください)。

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 は int、ygridlength および zgridlength は double、Particle::position::y (または ::z) および input_data::diam_large は double を返します。

多数のエラーが発生します。

「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 に答える