Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора индексации в списке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ (void) в макросе define http://www.cyberforum.ru/cpp-beginners/thread863459.html
Добрый день! Разбираюсь со строкой: #define lua_readline(L,b,p) \ ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ Что делает: (void)L? Только для того, что бы не было warning-ов при компиляции? Или при определении макросов, у данной строчки другая цель? Спасибо!
C++ Игра Угадай Слово ошибка в коде Здравствуйте,проблема в том, что программа работает не корректно. А именно в начале программы при вводе "да" игра закрывается, хотя наоборот должна начаться. Помогите пожалуйста. Собственно вот код : #include <iostream> #include <string> #include <cstdlib> #include <ctime> #include <cctype> using std::string; const int NUM = 20; const string wordlist = {"àðáóç", "áàáóøêà", "âîðîáåé", ... http://www.cyberforum.ru/cpp-beginners/thread863424.html
C++ создать программу для сравнения алгоритмов сортировки
создать программу для сравнения алгоритмов сортировки (Выбором и Пузырьком)т.е. чтоб выдавал время построения массива.Помогите очень нужно.Желательно с объяснением.
Сравнить n-чисел и найти максимальное и минимальное значение, не прибегая к if C++
Надо сравнить n-чисел и найти максимальное и минимальное значение, не прибегая к ужасным разветлению оператора if?
C++ Рекурсивная структура http://www.cyberforum.ru/cpp-beginners/thread863390.html
Добрый день! Стоит задача написать односвязный список. Как все работает в общем я представляю, а конкретно я понимаю это так: имеем общую структуру элемента: struct List { int item; List *Next; };
C++ Сортировка Шелла Добрый день! Как сделать сортировку методом Шелла, если у меня числа в массив можно ввести и с клавиатуры и случайные числа. В массиве 100 элементов. register int i, j, gap, k; char x, a; a=9; a=5; a=3; a=2; a=1; for(k=0; k < 5; k++) { подробнее

Показать сообщение отдельно
Убежденный
Системный программист
 Аватар для Убежденный
14453 / 6437 / 1017
Регистрация: 02.05.2013
Сообщений: 10,676
Завершенные тесты: 1
14.05.2013, 09:17     Перегрузка оператора индексации в списке
mappy89, с архитектурной точки зрения связный список вообще не должен иметь
оператора индексации и других методов, организующих произвольный доступ к содержимому.
Получение энного элемента - это крайне неэффективная операция, просто по причине
устройства связного списка: при каждом вызове выполняется цикл с проходом от начала
списка до нужного элемента. Просто подумайте, как это будет работать, если количество
элементов достигнет хотя бы нескольких тысяч.

Связный список, маскирующийся под обобщенный универсальный контейнер с произвольным
доступом - это "дырявая абстракция". Если требуется читать и записывать из середины,
лучше использовать другой контейнер, где индексация выполняется естественным образом.

C++
1
int &operator[](int);
Во-первых, вместо int в качестве индекса надежнее использовать так называемые memsize-типы.
Например, size_t или ptrdiff_t. Так вы расширяете теоретический максимум индекса, а
также страхуете себя от возможных проблем при переносе кода на 64-битные платформы.
Кроме того, использовать тип size_t и его псевдонимы для размеров - общепринятая практика.

Во-вторых, оператор индексации должен иметь две версии - обычную и const.
const-версия нужна, когда доступ к списку нужен только на чтение.
Например, функция, вычисляющая сумму всех элементов списка, не модифицирует его,
поэтому она может иметь следующую сигнатуру:
C++
1
int SumOfElements(my_list const &List);
Здесь в функцию будет передаваться константная ссылка на List - функции разрешается
вызывать только const-методы. Однако, если в классе my_list не определен const-оператор
индексации, попытка прочитать что-нибудь вызовет ошибку компиляции.

С учетом написанного, прототипы оператора индексации должны быть такими:
C++
1
2
int         operator [](size_t Index);          // Обычная версия.
int const & operator [](size_t Index) const;    // const-версия.
 
Текущее время: 01:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru