2014-01-25 22 views
0

比方說,我有一個vector排序:C++迭代器:如何查找在索引中堆排序

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

假設我要開始在第三元素排序(索引2)才結束,所以我有一個迭代器,指向0開始和過去1結束。如果我使用索引並將函數傳遞給當前元素的索引,要找到「0」的左側子元素,我將使用2 *索引+1。

讓「ITER」是指向0迭代器,索引2.下列:

iter+1 

將移動迭代器,使* ITER將現在等於2,但是,我不能動迭代器到左邊的孩子:

2*iter+1 

我該如何解決此問題並將迭代器移動到正確的位置?有沒有辦法找到迭代器的索引?

+0

難道是我還是我們早些時候得到同樣的問題? –

+0

@EdHeal:你沒記錯。 [這是一個重複。](http://stackoverflow.com/questions/21341220/index-of-vector-iterator)似乎很少有人在發佈問題之前使用SO搜索。 – Blastfurnace

回答

1

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

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

報價:

如果它是一個隨機訪問迭代器,函數使用操作符 - 來計算這一點。否則,該函數重複使用增加運算符(operator ++)。

+0

謝謝!我最終使用operator-。 – user3025403

0

std::vector的迭代器是隨機訪問迭代器,所以迭代器itr的指數是itr - vec.begin()

+0

謝謝。這有幫助。 – user3025403