Векторы, итераторы и std::find

Есть ли способ использовать разные типы итераторов в разных векторах? Или есть функция, которая возвращает позицию элемента в векторе как целое число?

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
}

Это пример кода, есть ли у кого-нибудь указатели?

Ответов (5)

Решение

Пытаться

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 ,ordinX и координатойY и хранить объекты структуры в векторе.

index = std::distance( monsterQueue.begin(), it );

Просто посчитайте

it - bot.monsterQueue.begin()

чтобы получить индекс.

Вы можете использовать произвольный доступ в 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 нет даже в векторе.

Вы думали об изменении базового типа monsterQueue на объект, который содержит или имеет ссылки / указатели на monsterDists и др.