我正在编写一个在线游戏,所以我对多重比较感到困惑,我需要做到最好的方式,这就是我在这里问的原因。
这是我的代码:
bool CHARACTER::UseItemNewAttribute(TItemPos source_pos, TItemPos target_pos, BYTE bType0, BYTE bType1, BYTE bType2, BYTE bType3)
{
LPITEM item;
LPITEM item_target;
if (!IsValidItemPosition(source_pos) || !(item = GetItem(source_pos)))
return false;
if (!IsValidItemPosition(target_pos) || !(item_target = GetItem(target_pos)))
return false;
if (bType0 <= 0 || bType0 > 255)
return false;
if (bType1 <= 0 || bType1 > 255)
return false;
if (bType2 <= 0 || bType2 > 255)
return false;
if (bType3 <= 0 || bType3 > 255)
return false;
if (!item_target->AddNewStyleAttribute(bType0, bType1, bType2, bType3))
return false;
...
首先是:在这里,我可以检查BYTE(0,255)值,但这些看起来像真的废话代码。据我所知......最好的方法是什么? (我希望从最好的方式来保持最佳性能。)
第二是:我需要对每个值进行比较,[!type0 == type1],[!type0 == type2] ....就像那样。在这种情况下,每个值应为1。最好的方法是什么?
答案 0 :(得分:0)
好吧,几小时后我找到了一个很好的方法。 std :: unique和std :: resize效果很好......
以下是一个例子:
std::vector<BYTE> vec_bTypes;
vec_bTypes.push_back(11);
vec_bTypes.push_back(11); // duplicate!!!
vec_bTypes.push_back(12);
vec_bTypes.push_back(13);
std::vector<BYTE>::iterator it;
it = std::unique (vec_bTypes.begin(), vec_bTypes.end());
vec_bTypes.resize( std::distance(vec_bTypes.begin(), it) );
// output will be 11 12 13...