std::deque: Как мне получить итератор, указывающий на элемент с указанным индексом?

У меня есть std::deque, и я хочу вставить элемент по указанному индексу (я знаю, что для этого лучше использовать std::list). Функция deque::insert() использует итератор для указания места вставки. Учитывая индекс, как я могу получить итератор, указывающий на это место, чтобы я мог передать этот итератор в insert()?

Например:

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 ничего, что явно делало бы то, что я хочу. Спасибо.


person Ptah- Opener of the Mouth    schedule 09.04.2010    source источник
comment
На самом деле, deque лучше, чем список в этом.   -  person    schedule 09.04.2010
comment
Нил, ты уверен? sgi.com/tech/stl/Deque.html говорит, что поддерживает линейное время вставка [...] посередине, а sgi.com/tech/stl/List .html имеет вставку постоянного времени [...] в середине.   -  person Matthew Flaschen    schedule 09.04.2010
comment
@Matthew Но сначала нужно найти точку вставки.   -  person    schedule 09.04.2010
comment
Собственно поэтому я и решил использовать deque. Но, оставив в стороне эти скобки, я просто имел в виду, что std::list лучше подходит для вставки в середине, а не в том, что он лучше для общей цели найти место в середине для вставки, а затем вставить туда.   -  person Ptah- Opener of the Mouth    schedule 09.04.2010


Ответы (1)


Двухсторонняя очередь поддерживает произвольный доступ, поэтому вы должны сказать

things.insert( my_deque.begin() + index, thing);
person Stephen    schedule 09.04.2010