![]() |
|
Модераторы: bsa |
![]()
|
|
| Mormishka |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Предположим есть класс
Я создаю массив объектов этого класса. Здесь естественно ошибка, т.к. конструктора по умолчанию нет.
Вопрос, как выделить память и при этом воспользоваться конструктором A(int n_) ? Это сообщение отредактировал(а) Mormishka - 12.6.2011, 12:04 |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| Mormishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Как тогда быть? Мне нужен (1,2,3-мерный) массив объектов, которые должны быть проинициализированы.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
или,
std::vector<A> ma(100,5); // 100 штук А инициализированных пятёркой (5) |
|||
|
||||
| Mormishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
volatile,
Я как раз отказываюсь от вектора в своей программе. Мне нужно свой класс создать, где будет выделятся память. Как тогда это в векторе реализовано? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Разреши поинтересоваться: по какой причине ? Самоистязание ? Задание в институте ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Mormishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
borisbn,
В программе очень нужна производительность, т.к. на каждую итерацию добывляется значение в вектор (push_back), векторов очень много. Как я понял при выделение памяти в контейнерах память выделяется несколько больше чем необходимо. Отсюда постоянная проверка происходит количества элементов. Легче выделить сразу сколько надо. Хотя вопрос, если reserve использовать (я знаю какое количество элементов мне надо), это ускорит работу? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Хм.. Вы надеетесь сделать эффективнее, чем сделано в стандартной библиотеке ? Вначале разочарую : при текущем уровне знаний у Вас не получится даже приблизиться к его эффективности.. Но также и обрадую : 1. не вектором единым живет stl, нужно только правильно подобрать под задачу подходящий контейнер.. 2. контейнеры stl довольно эффективны, если правильно ими пользоваться и в частности вектор позволяет в ручную указывать кол-во необходимой занимаемой памяти.. итого, нужно не выдумать свой велосипед, а хорошо изучить документацию и на основе этого проработать свой алгоритм.. Это сообщение отредактировал(а) mes - 12.6.2011, 16:40 |
|||
|
||||
| Mormishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
mes,
Понятно. А для чего используют reserve? Для того что лишний раз не выделять память? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
да, если заранее известно кол-во элеметов, то можно зарезервировать память, чтоб исключить автоматическое (неконтролиуемое и ненужное в данном случае) расширение.
|
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
||||
|
||||
| VolgaevLG |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.12.2010 Репутация: 1 Всего: 1 |
можешь сделать альтернативный конструктор без параметров, с заданием числа по умолчанию
тогда следующий код будет верным
Это сообщение отредактировал(а) VolgaevLG - 12.6.2011, 23:53 |
||||
|
|||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Mormishka, Простой массив инициализировать можно как угодно. В чём может быть проблема?
Можно придумать тысячи способов. Вот, хотя-бы такой.
Инициализировать примерно так:
Этот способ не очень хорош тем, что надо помнить что надо вызывать A::set_default (), перед инициализацией. Но кажется это близко к тому что вы хотите? Добавил: И еще этот код потокоопасный Это сообщение отредактировал(а) volatile - 13.6.2011, 06:53 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |