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
}

也可能创建一个具有 4 个成员 'monster'、monsterDist 和坐标 X 和坐标 Y 的结构并将结构对象存储在向量中会是一个更好的主意。

于 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的位置。当然,除非 iffind_this甚至不在向量中。

于 2009-02-24T12:44:57.063 回答
1

您是否考虑过将 monsterQueue 的基础类型更改为包含或具有指向 monsterDists 等的引用/指针的对象

于 2009-02-24T12:50:57.877 回答