在带有模板类元素的向量上的迭代器

时间:2014-10-22 08:30:34

标签: c++ vector iterator

我使用模板化的类来定义3D点(称为vec3<T>),然后将一些点存储在矢量中。我使用typdef来定义vec3<double> as vec3d;

因此,我试图在vector<vec3d>的向量上获得一个迭代器,我在编译过程中遇到了一个我不太懂的错误。我认为重要的是添加通过引用将vector<vec3d>传递给另一个类的方法。

这是我的代码:

for(vector<vec3d>::iterator ite=neighboursList.begin(); ite!=neighboursList.end(); ++ite)

这是错误消息:

error: conversion from '__gnu_cxx::__normal_iterator<const vec3<double>*, std::vector<vec3<double>, std::allocator<vec3<double> > > >' to non-scalar type '__gnu_cxx::__normal_iterator<vec3<double>*, std::vector<vec3<double>, std::allocator<vec3<double> > > >' requested

如果有人能够发现我正在做的事情有什么问题,我将非常感激。

betaplus

1 个答案:

答案 0 :(得分:0)

使用const迭代器:

for (std::vector<vec3d>::const_iterator ite=neighboursList.begin();
                     /*  ^^^^^^^^^^^^^^  /*    ite!=neighboursList.end(); ++ite)
{
    // ...
}

或者更好,请使用auto

for (auto ite = std::begin(neighbourList); ite != std::end(neighbourList); ++ite)
{
    // ...
}

或者更好,不要使用迭代器:

for (auto const & neighbour : neighbourList)
{
    // ...
}