【问题标题】:c++ stl iteratorsc++ stl迭代器
【发布时间】:2012-08-15 16:50:56
【问题描述】:

尝试将迭代器用于整数集的三维向量时遇到了很多错误。看下面的代码(这只是部分片段,因为整个东西太长了;我认为这应该足以看出哪里出了问题,但如果不是,请告诉我):

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

我觉得这个错误不知何故源于迭代器本身,但我无法弄清楚。

【问题讨论】:

  • 请附上particles_celllist的声明
  • @thekashyap 代码段第一行vector&lt;vector&lt;vector&lt;set&lt;int&gt; &gt; &gt; &gt; particles_celllist;
  • 我的错..我看到这个问题现在已经回答了.. :)

标签: c++ stl set


【解决方案1】:

你想要set&lt;int&gt;::iterator cell_iter;。只需再次仔细查看您调用的begin() 函数。

在 C++11 中你当然会说

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

从来没有注意到这很难:-)

【讨论】:

  • 哇……这么简单吧?现在似乎工作正常。每次我使用这样的东西时,我想我只是用一种稍微不同的方式来做,效果很好。非常感谢。
  • 在 C++03 中,我只需要完成 std::for_each(particles_celllist[wx][wy][wz].begin(),particles_celllist[wx][wy][wz].end(), Action()),甚至都没有注意到这很困难。事实上,这仍然是我在 C++11 中的做法(尽管 Action 现在可能是一个 lambda(这很难(有点))。
  • @LokiAstari:我不打算讨论更大的设计。对于您的情况,我更喜欢 C++11 中的 for (auto &amp; c : particles_celllist[wx][wy][wz]) { /* ... */ }。
【解决方案2】:

particles_celllist[wx][wy][wz] 是 set&lt;int&gt; 类型,所以 particles_celllist[wx][wy][wz].begin() 是 set&lt;int&gt;::iterator 类型

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2012-01-05
    • 2012-01-28
    • 2021-10-17
    相关资源
    最近更新 更多