C++ 检查指向向量C+内对象的指针+;

C++ 检查指向向量C+内对象的指针+;,c++,qt,pointers,vector,C++,Qt,Pointers,Vector,我目前正在阅读一些代码,我现在有一个road类,带有指向lanes(一个私有成员)的指针向量,这个road类包括一个lane类。这个车道类包含指向车辆的指针向量,这是另一个类,它包含简单的get和set函数来更新和获取车辆的位置、速度等。现在,我有车辆在单独的车道上行驶,我允许它们切换车道,因为在交通流中是这样的。但是,我希望我的车辆能够不断找到它与前面车辆之间的距离,即查看车辆矢量并找到最近的车辆。然后我打算用它来指示汽车是否应该减速。我还想确保领先于其他车辆的车辆,因为一旦车辆离开显示屏窗口

我目前正在阅读一些代码,我现在有一个road类,带有指向lanes(一个私有成员)的指针向量,这个road类包括一个lane类。这个车道类包含指向车辆的指针向量,这是另一个类,它包含简单的get和set函数来更新和获取车辆的位置、速度等。现在,我有车辆在单独的车道上行驶,我允许它们切换车道,因为在交通流中是这样的。但是,我希望我的车辆能够不断找到它与前面车辆之间的距离,即查看车辆矢量并找到最近的车辆。然后我打算用它来指示汽车是否应该减速。我还想确保领先于其他车辆的车辆,因为一旦车辆离开显示屏窗口高度,应将其删除

我的尝试如下:

void Lane::Simulate(double time)
{ // This simulate allows check between other vehicles.

double forwardDistance = 0;
    for (unsigned int iV = 0; iV < fVehicles.size(); iV++) 
    {
        for(unsigned int jV = 0; jV < fVehicles.size(); jV++)
        {
            forwardDistance = fVehicles[iV]->getPosition() - fVehicles[jV]->getPosition();
        }
    }

    if(fVehicles.size() < 15)
    {
        addRanVehicle(); // Adds a vehicle, with position zero but random velocities, to each lane.
    }

    for (unsigned int iVehicle = 0; iVehicle < fVehicles.size(); iVehicle++)
    {
        fVehicles[iVehicle]->Simulate(time); // Updates position based on time, velocity and acceleration.
    }
}
void Lane::模拟(双倍时间)
{//此模拟允许在其他车辆之间进行检查。
双前向距离=0;
for(无符号int iV=0;iVgetPosition()-fVehicles[jV]->getPosition();
}
}
如果(Fvehicle.size()<15)
{
addRanVehicle();//将位置为零但速度随机的车辆添加到每条车道。
}
for(无符号int-ivhicle=0;ivhicle模拟(时间);//根据时间、速度和加速度更新位置。
}
}
可能有比使用此
forwardDistance
参数更好的方法。我们的想法是在每对车辆上循环,避开点
iV==jV
,找到第四辆车前面的车辆,并将两辆车之间的距离记录到setDistance()函数中(这是我的车辆类的函数)。然后我就可以用它来检查一辆车是否靠得太近,是否可以超车,或者是否需要刹车


目前,我不确定如何为此建立有效的循环机制。

调查将
车辆有序插入车道的成本。如果根据道路上的位置订购了
车辆
s,则检测两辆
车辆
s的距离是儿童游戏:

乙二醇

变成

for (auto v_outer: fVehicles) 
{ 
    for (auto v_inner: fVehicles) 
    { 
        forwardDistance = v_outer->getPosition() - v_inner->getPosition(); 
    } 
} 
如果你在数行的话,看起来不会好很多,但你不会偶然发现

iV <= fVehicles.size()
它消除了你犯愚蠢、致命和难以发现的错误的可能性

让我们来分析一下:

for (auto v_outer: fVehicles) 
     ^    ^        ^
  type    |        |
  variable name    | 
           Container to iterate

在这种情况下,我还利用了
auto
<代码>自动
允许编译器选择数据类型。编译器知道
fVehicles
包含指向
Vehicle
s的指针,因此它将
auto
替换为
Vehicle*
。如果您发现自己以后要重构代码,那么这就消除了一些麻烦

不幸的是,在这个罐子里,它也会困住你。如果您遵循上述建议,
fvehicle
将变为

std::dequeue<Vehicle> fVehicles;

编译器擅长决定如何最好地处理该引用,或者它是否需要它。

调查将
车辆有序插入车道的成本。如果根据道路上的位置订购了
车辆
s,则检测两辆
车辆
s的距离是儿童游戏:

乙二醇

变成

for (auto v_outer: fVehicles) 
{ 
    for (auto v_inner: fVehicles) 
    { 
        forwardDistance = v_outer->getPosition() - v_inner->getPosition(); 
    } 
} 
如果你在数行的话,看起来不会好很多,但你不会偶然发现

iV <= fVehicles.size()
它消除了你犯愚蠢、致命和难以发现的错误的可能性

让我们来分析一下:

for (auto v_outer: fVehicles) 
     ^    ^        ^
  type    |        |
  variable name    | 
           Container to iterate

在这种情况下,我还利用了
auto
<代码>自动
允许编译器选择数据类型。编译器知道
fVehicles
包含指向
Vehicle
s的指针,因此它将
auto
替换为
Vehicle*
。如果您发现自己以后要重构代码,那么这就消除了一些麻烦

不幸的是,在这个罐子里,它也会困住你。如果您遵循上述建议,
fvehicle
将变为

std::dequeue<Vehicle> fVehicles;

编译器擅长决定如何最好地处理该引用,或者它是否需要它。

在计算后,您似乎没有使用
forwardDistance
。我知道我没有使用它。我不确定如何进行有效的环路,找到车道上两辆车之间的最小距离,即一辆车和前面一辆车之间的距离。非常不清楚,抱歉。您正在检查车道上当前车辆与同一车道上所有其他车辆之间的距离?假设Fvehicle是一个向量?您想计算车道上任意两辆车之间的最小距离吗?车辆能否在车道内改变位置?如果没有,那么您需要的只是一个计算
forwardDistance=fVehicles[n]->getPosition()-fVehicles[n-1]->getPosition()的单循环
A
std::deque
可能是更好的数据结构,用于存储车道中的车辆。一段受监控的道路将在一侧添加汽车,从另一侧删除你在一侧添加的汽车,从另一侧删除的汽车,这种行为使一辆车的性能大大超过了一个
向量
。计算后,你似乎没有使用
前向距离
。我知道我没有使用过它。我不确定如何进行有效的环路,找到车道上两辆车之间的最小距离,即一辆车和前面一辆车之间的距离。非常不清楚,抱歉。您正在检查车道上当前车辆与同一车道上所有其他车辆之间的距离?假设Fvehicle是一个向量?你想计算我们之间的最小距离吗