2010-04-09 109 views
10

我有一個std :: deque,我想插入一個指定索引的元素(我知道std :: list會更好)。 deque :: insert()函數需要一個迭代器來指定要插入的位置。給定一個索引,如何獲得指向該位置的迭代器,以便我可以將該迭代器傳遞給insert()?std :: deque:如何獲得指向指定索引處元素的迭代器?

例如:

void insertThing (deque<Thing> & things, Thing thing, size_t index) 
{ 
    deque<Thing>::iterator it = /* what do I do here? */ 
    things.insert (it, thing); 
} 

我敢肯定,這是一個非常基本的問題,我爲此道歉。我使用STL已經很長時間了,我沒有在std :: deque的成員列表中看到任何明顯做我想做的事情。謝謝。

+1

實際上,雙端隊列爲在這個名單比更好。 – 2010-04-09 15:23:07

+0

尼爾,你確定? http://www.sgi.com/tech/stl/Deque.html表示它支持「中間線性時間插入」,而http://www.sgi.com/tech/stl/List .html具有「中間插入時間」。 – 2010-04-09 15:30:43

+0

@Matthew但你首先必須找到插入點。 – 2010-04-09 15:31:21

回答

22
void insertThing (deque<Thing> & things, Thing thing, size_t index) 
{ 
    deque<Thing>::iterator it = things.begin() + index; 
    things.insert (it, thing); 
} 
+0

非常感謝! – 2010-04-09 15:23:36

10

一個deque支持隨機訪問,所以你應該能夠說

things.insert(my_deque.begin() + index, thing);