C++ 检查指向向量C+内对象的指针+;
我目前正在阅读一些代码,我现在有一个road类,带有指向lanes(一个私有成员)的指针向量,这个road类包括一个lane类。这个车道类包含指向车辆的指针向量,这是另一个类,它包含简单的get和set函数来更新和获取车辆的位置、速度等。现在,我有车辆在单独的车道上行驶,我允许它们切换车道,因为在交通流中是这样的。但是,我希望我的车辆能够不断找到它与前面车辆之间的距离,即查看车辆矢量并找到最近的车辆。然后我打算用它来指示汽车是否应该减速。我还想确保领先于其他车辆的车辆,因为一旦车辆离开显示屏窗口高度,应将其删除 我的尝试如下:C++ 检查指向向量C+内对象的指针+;,c++,qt,pointers,vector,C++,Qt,Pointers,Vector,我目前正在阅读一些代码,我现在有一个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()的单循环
Astd::deque
可能是更好的数据结构,用于存储车道中的车辆。一段受监控的道路将在一侧添加汽车,从另一侧删除你在一侧添加的汽车,从另一侧删除的汽车,这种行为使一辆车的性能大大超过了一个向量
。计算后,你似乎没有使用前向距离
。我知道我没有使用过它。我不确定如何进行有效的环路,找到车道上两辆车之间的最小距离,即一辆车和前面一辆车之间的距离。非常不清楚,抱歉。您正在检查车道上当前车辆与同一车道上所有其他车辆之间的距离?假设Fvehicle是一个向量?你想计算我们之间的最小距离吗