【发布时间】:2010-07-02 22:10:04
【问题描述】:
我需要帮助来加快这段代码的速度:
UnitBase* Formation::operator[](ushort offset)
{
UnitBase* unit = 0;
if (offset < itsNumFightingUnits)
{
ushort j = 0;
for (ushort i = 0; i < itsNumUnits; ++i)
{
if (unitSetup[i] == UNIT_ON_FRONT)
{
if (j == offset)
unit = unitFormation[i];
++j;
}
}
}
else
throw NotFound();
return unit;
}
所以,为了提供一些背景知识,我有这个类Formation,它包含一个指向UnitBase 对象的指针数组,称为UnitFormation。 UnitBase* 数组有一个大小相等的数字数组,表示每个对应 UnitBase 对象的状态,称为 UnitSetup。
我已经重载了[]操作符,以便只返回指向那些具有特定状态的UnitBase对象的指针,所以如果我要求itsFormation[5],该函数不一定返回UnitFormation[5],而是第5个元素状态为 UNIT_ON_FRONT 的 UnitFormation。
我已经尝试使用上面的代码,但根据我的分析器,它花费了太多时间。这是有道理的,因为算法必须在返回请求的指针之前计算所有元素。
我是否需要彻底重新考虑整个问题,或者可以以某种方式更快地做到这一点?
提前致谢。
【问题讨论】:
-
将 ushort 更改为 unsigned int 或 size_t
标签: c++ performance algorithm optimization