![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Проблема вот в чем. Я создал класс, в нем я перегрузил operator[], который возвращает указатель на структуру.
Затем, в создаю объект как указатель (через функцию new). например, пусть я создал класс Database и структуру Person; class Database { Person* operator[](int offset); }; Теперь в программе я пишу int main() { Database* db; Person *pPerson; pPerson = db[2]; } И он мне выводит что он не может конвертировать Database в Person*. Я так понял что нужно разыменывать, только я вот не знаю как. |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Ни хрена непонятно... Приведи весь код... Что-то ты СОВСЕМ не то делаешь...
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Ой, я короче уже исходник удалил, мне уже вроде как не надо. Ну, короче, как надо перегрузить оператор operator[] в классе связанного списка, чтобы со связанным списком можно было работать как с массивом. |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Вместо
надо писать
потому что у тебя оператор [] определен для класса DataBase, а db - это указатель на него. Вот это операция: *db и называется разыменованием. -------------------- ... |
||||
|
|||||
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
если я правельно понял вопросс, то может лучше было бы не возвращать указатель на структуру, а просто значение (т.е разыменовать указатель перед возвратом)
-------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| comcon1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Возможно, ты неправЕльно понял вопрос. Возврат неконстантого указателя позволяет производить операции с памятью для тех структур, на которые указывают эл-ты массива.
Кроме того, возврат указателя (и константного тоже) всегда менше времени занимает, чем возврат целой структуры. Ты понимаешь, что при возврате структуры для нее запускается конструктор копирования? В случае, когда у тебя много обращений к структуре, выгодней по времени иметь реальный ее инстанс в своей програме. ( Если я не прав, исправьте меня. ) Например так:
быстрее чем так
Собственно по теме: -- Для этих целей имеется шаблон: boost::pointer_array. Вот так. Появился в 1_33. Это сообщение отредактировал(а) comcon1 - 21.12.2005, 12:24 |
||||
|
|||||
| blackofe |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
Earnest дело говорит. оператор [] переопределен для класса Database, а не для указателя на него. посему будет правильным:
или же
а db[2] у тебя будет указывать на 3-й элемент в массиве из объектов типа Database. Это сообщение отредактировал(а) blackofe - 21.12.2005, 19:02 |
||||
|
|||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Спасибо, разобрался, теперь все работает.
|
|||
|
||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
А кстати, вот еще вопрос возник. Можно ли ускорить поиск нужного элемента (в общем отказаться от цикла). Дело в том, когда будет очень много значений в связанном списке, чтобы обратиться к последнему нужно будет пройти все элементы, а это не экономично. Можно использовать что-нибудь, например, типа таких конструкций:
|
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Храни указатель на последний элемент.
Такого со списком достичь невозможно. В массиве(std::vector и аналоги) есть быстрый доступ к любому элементу В списке(std::list или твой) есть возможность быстрой вставки\удаления в середину Добится сразу двух эффектов невозможно -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ну почему же...
map, например, или hash_map реализуют вполне приемлимый компромисс, когда и доступ, и вставка вполне быстрые... В общем, Fighter, раз уж ты пишешь Database, то надо подумать и об индексировании. -------------------- ... |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Переформулируем: - невозможно создать контейнер, удовлетвояющий следующим условиям: 1. Вставка\Удаление элемента в любое места занимает О(1) операций 2. Доспут к любому элементу осуществляется за О(1) операций -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
почему бы не использовать бинарное дерево или AVL-дерево
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |