STL библиотека С++
Объясните, пожалуйста, доходчиво :) , почему при работе с контейнером-вектором, можно использовать доступ через индексы как в массиве, а при работе, например с контейнером типа <list> или <multiset> можно использовать только итераторы, а по индексу, доступа нет.
адрес = адрес_первого_элемента + размер_элемента * номер_элемента
а в списке такого сделать нельзя. Поэтому только в векторе введены индексы - по ним быстрее можно добраться до конкретного элемента. В списке же быстро сделать нельзя - все равно придется перебирать их все по-очереди. Поэтому у них только итераторы.
Хотя впинципе все зависит от реализации. Если бы список был реализован через массив, то тогда бы возможно был бы и произвольный доступ(как в массиве).
З.Ы. Когда отвечал из-за ... рекламы не заметил имеющийся ответ)
До конца не могу понять в чем прелесть использования списков <list>.
>на мыло выслать материалы по спискам
Если есть такая возможность, мой email: ingachernova[@].yandex.ru
До конца не могу понять в чем прелесть использования списков <list>.
[/QUOTE]
Как раз в разности подходов к реализации и интерфейсу. Для каких то задач больше подходит список, для каких то массив, или вектор.
Что такое список по определению - это набор элементов, в котором каждый указывает на следующий за ним, ну и на предыдущий если список двусвязный.
Это удобно для задачь, где требуеться такая модель хранения данных. Причем позволяющая удалять любой элемент из середины, конца или начала, а так же вставлять куда угодно без всяких проблемм и затрат. Просто исправляються связи на месте вставления. В векторе же все данные подряд в памяти и просто так вычленить в середине одну ячейку или добавить раздвинув остальные не получится.
в stl есть понятие гарантированной скорости выполнения в том числе вставка и поиск по различным контейнерам. Для Vector поиск происходит за константное время (в смысле от кол-ва элементов в нем содержащимся.) Зато вставка требует перераспределения памяти, а если еще и не в конец то это в обще линейное время. С другой стороны в списке(list) вставка по итератору происходит за константное время и не требует перераспределения памяти. Зато поиск происходит дольше.
Читай Страуструпа.