Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вектори или список??? / 6 сообщений из 6, страница 1 из 1
06.07.2006, 17:27
    #33836468
Staub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вектори или список???
Здравствуйте, господа. я начинающий программист и у меня вопрос по поводу использования векторов и списков.
Как я понимаю, основное их отличие в том, что вектор позволяет получить доступ к любому элементу, а список только последовательно. получается вектор намного более мощный механизм. Вопрос: какие есть например ситуации в которых удобнее использовать список (класс <list>)???
и еще второй вопрос- есть два куска кода-1й-используется vector, 2й-list.
они абсолютно идентичны. но возникает вопрос с функцие insert. В обоих случаях эта функция позволяет вставлять элемент, перед элементом, заданным итератором.но в списках это вызывает ошибку (см. ниже). подскажите пожалкйста.

#include <vector>

using namespace std;
typedef vector<char> CHARVCTR;

CHARVCTR chVc;
CHARVCTR::iterator i;
int posit;
char ch = 'A';

sscanf(spinBox2->text(), "%d", &posit);//читаем из текстового поля значение
i = chVc.begin()+posit;
chVc.insert(i, (char)(ch+posit));


===============

#include <list>

using namespace std;
typedef list<char> CHARLIST;

CHARLIST chVc;
CHARLIST::iterator i;
int posit;
char ch = 'A';

sscanf(spinBox2->text(), "%d", &posit);//читаем из текстового поля значение
i = chVc.begin()+posit;//!!!возникает ошибка - текст ошибки ниже
chVc.insert(i, (char)(ch+posit));


===============

error C2678: binary '+' : no operator defined which takes a left-hand operand of type 'class std::list<char,class std::allocator<char> >::iterator' (or there is no acc
eptable conversion)
...
Рейтинг: 0 / 0
06.07.2006, 18:15
    #33836621
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вектори или список???
Staub
Как я понимаю, основное их отличие в том, что вектор позволяет получить доступ к любому элементу, а список только последовательно. получается вектор намного более мощный механизм. Вопрос: какие есть например ситуации в которых удобнее использовать список

вектор - доступ по индексу, операции вставки/удаления в конец и в начало вектора - константное время, операция вставки/удаления в середине вектора - линейное время.

список - операции вставки/удаления за констнатное время независимо от позиции, но зато доступ к элементам только последовательный.

Исходя из этого решайте, в каких задачах вам будет удобней исполльзовать вектор, в каких список.

... заданным итератором.но в списках это вызывает ошибку (см. ниже). подскажите пожалкйста.

В сообщении об ошибке английским по фоновому написано, что нет оператора +, такого который принимал бы в качестве левого операнда тип list<char>::iterator. Первый вариант работает потому что итераторы, что для списка, что для вектора они implemented defined, и часто в случае вектора реализуются через простые указатели.
...
Рейтинг: 0 / 0
06.07.2006, 18:23
    #33836648
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вектори или список???
Код: plaintext
std::advance
...
Рейтинг: 0 / 0
07.07.2006, 18:59
    #33839540
Pavel Kilevatyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вектори или список???
Гм, не смею замахиваться на лавры господина МП, но все же не удержался:

Срочно читать Герба Саттера "Новые сложные задачи на C++"

Задача 1 Вектор: потребление и злоупотребление

Всё разжевано и указаны типичные ошибки. Одну из них Вы допустили.
...
Рейтинг: 0 / 0
09.07.2006, 19:42
    #33840851
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вектори или список???
...
Рейтинг: 0 / 0
09.07.2006, 19:45
    #33840857
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вектори или список???
Staub Вопрос: какие есть например ситуации в которых удобнее использовать список (класс <list>)???


Необходимость частых вставок в произвольное место коллекции, а не только
в конец. И вообще просто необходимость частых вставок (в векторе при расширении базовой памяти вектор копируется в новое место, это может быть долго).

Staub
и еще второй вопрос- есть два куска кода-1й-используется vector, 2й-list.
они абсолютно идентичны. но возникает вопрос с функцие insert. В обоих случаях эта функция позволяет вставлять элемент, перед элементом, заданным итератором.но в списках это вызывает ошибку (см. ниже). подскажите пожалкйста.


Это вопрос из серии "все коллекции одинаковые, но не всегда".
Почитайте если очень нужно Меерса, эффективное использование STL.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вектори или список??? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]