В методе insert класса Vector нужно передать итератор указывающий на позицию в которую ты хочешь поместить элемент, я правильно понимаю что для того чтобы поместить тот или иной элемент в заданную позицию нужно итерироваться через весь список пока не найдется нужная позиция ?
Класс vector представляет собой динамический массив и реализует итераторы с произвольным доступом. Соответственно доступ к любой позиции всегда производится за одну операцию. Другое дело, что для того, чтобы вставить новый элемент на требуемую позицию, может потребоваться передвинуть элементы, стоящие справа от него, а то и перевыделить новый массив, если в старом не хватает места.
зачем тогда в методе добавлять ссылку на итератор можно же просто позицию обозначить?
Ответ на этот вопрос проще дать на примере. Например я хочу имплементировать функцию, которая вставляет элемент в n-ю позицию:
template<class Container,class T>
void insert_into_pos( Container &c, size_t pos, T obj )
{
if( pos >= c.size() ) throw std::runtime_error( "invalid position" );
c.insert( std::next( c.begin(), pos ), std::move( obj ) );
}
Эта функция будет работать с многими контейнерами, такими как std::vector std::list std::deque и пр. Если бы в векторе был доступен только метод с индексом, такая функция бы не работала с многими другими контейнерами.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости