3

異なるベクトルで異なるタイプの反復子を使用する方法はありますか? または、ベクトル内の要素の位置を整数として返す関数はありますか?

std::vector<DWORD>::iterator it;        // Iterator

// monsterQueue is a <DWORD> vector

it = std::find(bot.monsterQueue.begin(), bot.monsterQueue.end(), object);   
// Check do we have the object in the queue

if(it != bot.monsterQueue.end())    // If we do have it
{
    bot.monsterDists.at(it) = mobDist; // monsterDists is <int> vector
    bot.monsterCoordX.at(it) = PosX; // monsterCoordX is <int> vector
    bot.monsterCoordY.at(it) = PosY; // monsterCoordY is <int> vector too
}

それはいくつかのサンプルコードです。誰かポインターを持っていますか?

4

5 に答える 5

12
index = std::distance( monsterQueue.begin(), it );
于 2009-02-24T12:49:50.390 に答える
6

簡単に計算する

it - bot.monsterQueue.begin()

インデックスを取得します。

于 2009-02-24T12:48:11.130 に答える
6

試す

std::vector<DWORD>::iterator it;        // Iterator

// monsterQueue is a <DWORD> vector

it = std::find(bot.monsterQueue.begin(), bot.monsterQueue.end(), object);   
// Check do we have the object in the queue

if(it != bot.monsterQueue.end())    // If we do have it
{

size_t idx = それ - bot.monsterQueue.begin()

    bot.monsterDists.at(idx) = mobDist; // monsterDists is <int> vector
    bot.monsterCoordX.at(idx) = PosX; // monsterCoordX is <int> vector
    bot.monsterCoordY.at(idx) = PosY; // monsterCoordY is <int> vector too
}

また、「monster」、monsterDist、および座標 X と座標 Y の 4 つのメンバーを持つ構造体を作成し、構造体オブジェクトをベクトルに格納することもおそらく良い考えです。

于 2009-02-24T12:53:15.203 に答える
1

std::vectors でランダム アクセスを使用できます。

DWORD find_this = 0x0;
int pos = 0;
for (; i<monsterQueue.size(); ++i)
{
    if (monsterQueue[i]==find_this)
        break;
}

ループの後、 pos はループが壊れた場所、つまり がfind_thisある場所になります。find_thisもちろん、がベクトル内にない場合を除きます。

于 2009-02-24T12:44:57.063 に答える
1

MonsterQueue の基になるタイプを、monsterDists などへの参照/ポインターを含む、または持つオブジェクトに変更することを考えましたか?

于 2009-02-24T12:50:57.877 に答える