c++ - 如何检查迭代器指向的内容是否存在

标签 c++ math vector iterator

我有一个遍历类 vector 的循环。它在类中找到 std::vector 并在特定元素处找到 glm::vec3。在循环中,我有一个指向下一个类的迭代器。

我使用这些数据来计算一些 vector 。

如何检查 (*nextSegIt) 是否确实存在?当 segIt 到达最后一个元素时,我猜它会随机指向某个地方。

我尝试了一个 if 语句来检查它是否为 NULL 或者它是否是 vector 数组的末尾,但都不会编译。

有人有什么建议吗?

提前致谢。

std::vector<RoadSegement*>::iterator segIt;
std::vector<RoadSegement*>::iterator nextSegIt;

for (segIt = nextSegIt = m_segmentArray.begin(); segIt != m_segmentArray.end(); segIt++)
{
    nextSegIt++;
    (*segIt)->calculateVectors((*segIt)->getRoadSegmentCoords().at(3), (*segIt)->getRoadSegmentCoords().at(2), (*nextSegIt)->getRoadSegmentCoords().at(3));
}

RoadSegment 构造函数

RoadSegement::RoadSegement()
{
    m_roadSegment.push_back(glm::vec3(-1, +1, 0));
    m_roadSegment.push_back(glm::vec3(-1, -1, 0));
    m_roadSegment.push_back(glm::vec3( 0, +1, 0));
    m_roadSegment.push_back(glm::vec3( 0, -1, 0));
    m_roadSegment.push_back(glm::vec3(+1, +1, 0));
    m_roadSegment.push_back(glm::vec3(+1, -1, 0));

    m_roadWidth = 0.5;
    scale(m_roadWidth);
}

calculateVectors() 函数:

void RoadSegement::calculateVectors(glm::vec3 _point, glm::vec3 _nextPoint, glm::vec3 _nextNextPoint)
{
    glm::vec3 vector0 = glm::vec3(m_roadSegment.at(2) - _point);
    glm::vec3 vector1 = glm::vec3(m_roadSegment.at(1) - _point);
    glm::vec3 vector2 = glm::vec3(m_roadSegment.at(5) - _point);
    glm::vec3 vector3 = glm::vec3(_nextNextPoint - _nextPoint);
    glm::vec3 vector4 = glm::vec3(m_roadSegment.at(0) - _nextPoint);
    glm::vec3 vector5 = glm::vec3(m_roadSegment.at(4) - _nextPoint);

    m_segmentVectors.push_back(vector0);
    m_segmentVectors.push_back(vector1);
    m_segmentVectors.push_back(vector2);
    m_segmentVectors.push_back(vector3);
    m_segmentVectors.push_back(vector4);
    m_segmentVectors.push_back(vector5);
} 

最佳答案

足够简单:检查是否 nextSegIt == m_segmentArray.end()。如果是,则该元素不存在。

如果没有 NextNextPoint,显然您必须调用不同的函数。您可以传递一个虚拟值,但不推荐这样做。

关于c++ - 如何检查迭代器指向的内容是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808630/

相关文章:

C++ vector 推/弹出

c++ - std::set weird < 重载错误

java - 在 Java 和 C++ 中可视化二叉树

c++ - Tensorflow C++ r1.13 构建错误 : 'TopK' is not a member of 'tensorflow::ops'

math - 在 3D 空间中旋转矢量

c++ - 如何给 vector 数组一个大小?

c++ - OpenCV 2.4.2 imread 函数导致运行时错误

ios - 在 iOS 中实现 cantor 配对功能

c# - 是否可以使用 EF C# Linq 将数学表达式存储在数据库中

c++ - 如何真正删除 vector