【问题标题】:Vectors, iterators and std::find向量、迭代器和 std::find
【发布时间】:2010-10-09 13:22:22
【问题描述】:

有没有办法在不同的向量中使用不同类型的迭代器?或者,是否有一个函数可以将向量中元素的位置作为整数返回?

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
}

这是一些示例代码,有人有任何指针吗?

【问题讨论】:

    标签: c++ vector iterator


    【解决方案1】:

    试试

    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 = it - 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 的结构并将结构对象存储在向量中可能是一个更好的主意。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        index = std::distance( monsterQueue.begin(), it );
        

        【讨论】:

        • 对于距离而言,使用 difference_type 比使用 int 更好
        【解决方案4】:

        简单计算

        it - bot.monsterQueue.begin()
        

        获取索引。

        【讨论】:

        • +1。我可以建议您还提到这是因为向量是 RandomAccessContainer 吗?
        【解决方案5】:

        您可以在 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 甚至不在向量中。

        【讨论】:

          猜你喜欢
          • 2017-07-27
          • 1970-01-01
          • 2010-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-14
          • 2015-01-10
          相关资源
          最近更新 更多