![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| BlowFish |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 29.3.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
Добрый день!
Я написал свой одномерный массив и для него определил operator[]:
CVec<int> *V = new CVec<int>(10); ... if ((*V)[k]>0) {/*....*/} Как-то неочень красиво, жаба душит... Можно ли определить оператор[] для указателя? Что можете посоветовать? |
||||
|
|||||
| BlowFish |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 29.3.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
не хочется, чтоб тема утонула без ответа...
|
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Для указателя нельзя. А зачем тебе вообще динамически создавать вектор? Его специально придумывали, как статическое хранилище динамически создаваемых объектов. В этом варианте он гораздо лучше работает.
А вообще, в таких случаях можно определить оберку:
Только зачем делать обертку над оберткой? -------------------- Волны гасят ветер... |
|||
|
||||
| BlowFish |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 29.3.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
У меня есть внешние вектора и матрицы (далее просто данные). Так же есть некий класс CDriver, который обрабатывает эти данные. У возник меня вопрос как это все связать. На ум пришло два решения:
1. Поместить в CDriver данные статически, т.е. сначала в конструкторе подготовить пустые вектора и матрицы нужного размера. А потом функциями-членами CDriver заполнить эти данные. 2. Поместить данные динамически (т.е. указатели). И потом также функциями-членами CDriver заполнить эти данные. Видно, что второй способ более эффективен, т.к. не требует предварительной инициализации данных, а сразу же подразумевает копирование. Таким образом я пошел вторым способом и столкнулся с проблемой (см. первый постинг). А вообще я хотел написать прграмму так: сначала написать классы для работы с векторами и матрицами и обеспечить их нужными операторами, потом написать некий класс CDriver, в котором уже упор сделать на математику. Правильно ли я рассуждаю при проектировании программы? Какие дадите советы? |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Так. Тут у тебя какая-то путаница, между данными и их хранилищем. Вектора, матрицы и т.п. - это все классы-коллекции - хранилища данных. Делать их динамическими в твоем случае совершенно не нужно и более того - не рационально. Далее данные - это как раз то, что храниться в этих коллекциях. Они-то как раз и будут создаваться динамически. Если у тебя изначально нет никаких данных - у тебя будут пустые коллекции. По мере надобности ты будешь их заполнять.
Если тебя интересует эффективность использования памяти - то класс-коллекция должна его обеспечить, а не некторые куски программы, где ты эти коллекции используешь. Так стандартным решением является выделение памяти куском (то есть сразу под некоторое количество елементов), размер которого указывает пользователь и далее, если этот кусок заполняется, выделять еще один кусок, размер которого, опять же, указывает пользователь. Для разных реализаций это можно сделать по разному, например, для простых типов, можно использовать что-нибудь типа realloc. Для классов так, конечно, не подойдет - их нужно копировать с помощью конструктора. В стандартной библиотеке C++ есть то, что тебе нужно: std::vector - для сложных типов. std::valarray - для простых. Это сообщение отредактировал(а) Fantasist - 1.3.2003, 06:46 -------------------- Волны гасят ветер... |
|||
|
||||
| BlowFish |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 29.3.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
понятно, с некоторого момента я тоже стал так думать... Я знаю, что существует стандартная библиотека, которая написана для того, чтоб её использовали. Просто мне было интересно написать самому "классы-коллекции". Узнаешь много нового, плюс это интересно
|
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Это точно, но вначале следуют разобраться с тем, что есть. Решения, найденные и отлаженные в течении нескольких лет (десятков, даже), стоят того, чтобы с ними ознакомиться. После этого гораздо больше будешь знать основы, как к этому делу вообще подходить. -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |