【问题标题】:C++ Iterators: How to find the index for a heapsortC++ 迭代器:如何找到堆排序的索引
【发布时间】:2014-02-16 03:50:12
【问题描述】:

假设我有一个要排序的向量:

std::vector v{9, 8, 0, 2, 7, 3, 2, 1}

假设我想从第三个元素(索引 2)开始排序直到结束,所以我有一个迭代器指向 0 开始和过去 1 结束。如果我使用索引并将当前元素的索引传递给函数,要找到“0”的左孩子,我将使用 2*index+1。

设“iter”为指向 0、索引 2 处的迭代器。如下:

iter+1

将移动迭代器,使 *iter 现在等于 2。但是,我无法将迭代器移动到左子节点:

2*iter+1

如何解决这个问题并将迭代器移动到正确的位置?有没有办法找到迭代器的索引?

【问题讨论】:

  • 是我还是我们之前得到了同样的问题?
  • @EdHeal:你没记错。 This is a duplicate. 似乎很少有人在发布问题之前使用 SO 搜索。

标签: c++ iterator heap


【解决方案1】:

std::vector的迭代器是随机访问迭代器,所以迭代器itr的索引是itr - vec.begin()

【讨论】:

    【解决方案2】:

    您可以使用std::distance。例如:

    auto index = std::distance(v.begin(), iter);
    

    引用:

    如果它是一个随机访问迭代器,该函数使用 operator- 来计算它。否则,函数重复使用递增运算符(operator++)。

    【讨论】:

    • 谢谢!我确实最终使用了 operator-。
    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 2013-01-11
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多