2009-02-24 106 views
3

有什么办法在不同的向量中使用不同类型的迭代器?或者,是否有一个函数将向量中元素的位置作为整数返回?向量,迭代器和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 =它 - 机器人.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个成员的怪物,monsterDist和coordinateX和coordinateY并存储向量中的结构对象。

1

您可以使用的std ::矢量的随机访问:

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

循环后,POS机将是在环路打破,即,其中find_this所在。当然,除非find_this甚至不在矢量中。

6

简单地计算

it - bot.monsterQueue.begin() 

拿到指标。

+0

+1。我可以建议你也提到,这是有效的,因为矢量是一个RandomAccessContainer? – 2009-02-24 12:53:44

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

更好地使用difference_type比int的距离 – 2009-02-24 12:51:34

1

你有没有想过改变底层类型monsterQueue的到包含或引用/指针monsterDists等物体人