2014-10-22 78 views
-1

我使用模板類來定義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

+0

你有傳染媒介s的vec3ds?這是嵌套的。如何使用平面存儲進行訪問? – 2014-10-22 08:40:28

+0

我只有vec3ds的矢量和vec3d類中的一些「重要」方法 – betaplus 2014-10-23 11:28:53

回答

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) 
{ 
    // ... 
} 
+0

感謝您的回答,const iterator的工作原理。實際上,我將這個向量作爲另一個類的方法的const引用。這就是爲什麼我需要使用const_iterator。 – betaplus 2014-10-23 11:26:52