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

How to check if what an iterator points to exists

本文关键字:存在 是否 迭代器 何检查 检查      更新时间:2023-10-16

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

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

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

我已经尝试了一个 if 语句来检查它是否NULL或者它是否是矢量数组的末尾,但两者都无法编译。

有人有什么建议吗?

提前谢谢。

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,你显然必须调用一个不同的函数。 您可以传递虚拟值,但不建议这样做。