比较多个BYTE值

时间:2015-03-27 13:27:14

标签: c++ comparison

我正在编写一个在线游戏,所以我对多重比较感到困惑,我需要做到最好的方式,这就是我在这里问的原因。

这是我的代码:

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。最好的方法是什么?

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...