如何遍历const向量<glm :: vec3>

时间:2018-11-03 11:37:11

标签: c++

我有这个向量glm :: vec3元素

std::vector<glm::vec3> const& vertices

,我想遍历它们。我是这样尝试的。

for(std::vector<glm::vec3>::iterator it = vertices.begin(); it != vertices.end(); ++it) {
        ...  
}

..但是编译器告诉我

no viable conversion from '__wrap_iter<const_pointer>' to '__wrap_iter<pointer>'

任何人都可以帮助我如何在此向量上正确进行迭代。谢谢:)

1 个答案:

答案 0 :(得分:1)

此错误是因为您将std :: vector声明为常量:

std::vector<glm::vec3> const& vertices

然后,当您声明迭代器循环时,您使用了可变的迭代器(即,允许您写入迭代器指向的值的非常量迭代器)。这直接违反了您对向量的原始声明。您可以通过使用常量迭代器进行如下循环来解决此问题:

for(std::vector<glm::vec3>::const_iterator it = vertices.begin(); it != vertices.end(); ++it) {
    ...  
}

或者,如果您确实需要更改访问权限(例如,您要写入数据),则可以声明向量的原始声明,而无需使用“ const”关键字,例如:

std::vector<glm::vec3>& vertices