В методе 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
и пр. Если бы в векторе был доступен только метод с индексом, такая функция бы не работала с многими другими контейнерами.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Извините за глупый вопрос, но я только начал осваивать С++Нашел в интернете код, где написана строка, но так и не смог понять, что она означает
Как лучше всего организовать структуру C++ проекта, использующего CMake и юнит-тесты?
Пишу проект под linux с использованием GCC и CMakeДля правильной работы boost::stacktrace понадобилось подключить библиотеку libbacktrace