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

Интересное о vector и map. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
ШКІПЕР
 Аватар для ШКІПЕР
93 / 93 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
27.01.2012, 18:11     Интересное о vector и map. #1
Здравствуйте!

1. В процессе работы с векторами обнаружил интересный момент, представим что у нас есть какой-то вектор и созданные нами какие-то объекты:

C++
1
какой-то_вектор.push_back ( *(new НашОбъект (аргумент1_для_конструктора, аргумент2_для_конструктора,...) );
Таким образом в вектор добавляется динамически созданный объект, внимание, вопрос: после создание выделенная память не чистится ? В C# - чистится уборщиком, но в С++ ? Почистить, вероятно, не получится... Что бы вы делали в этом случае, или забили и сделали статически ? (***.push_back (НашОбъект (аргумент1_для_конструктора, ...)); )


2. map - как известно, бросая в него что-то оно автоматически сортируется. А как на счет map< какой-то_тип_1, какой-то_тип_2> ? Сортировка идет по какой-то_тип_1 ? В таком случае - как сделать, чтобы сортировалось, например, по какой-то_тип_2 ? Вероятно бред, но забавный.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
27.01.2012, 18:23     Интересное о vector и map. #2
1. нужна динамика - можете хранить указатели на объекты, созданные с помощью new, а значит можно потом их delete.
2. map< какой-то_тип_2, какой-то_тип_1>
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.01.2012, 18:43     Интересное о vector и map. #3
1. Это утечка. К тому же делать так нет никакого смысла.
2. Никак.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.01.2012, 18:53     Интересное о vector и map. #4
1. Возможно, умные указатели помогут. Но тут я не компетентен.
2. Разве по тип_1 сортировка? Вроде же по тип_2.
Для примера - если создать map< string, int >, где ключом будет слово в тексте, а значением - количество его вхождений в текст, то в map.begin() будет лежать пара с наибольшим значением.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.01.2012, 20:02     Интересное о vector и map. #5
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Таким образом в вектор добавляется динамически созданный объект, внимание, вопрос: после создание выделенная память не чистится ?
таким, нет
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
В C# - чистится уборщиком, но в С++ ?
и ещё раз НЕТ!
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Что бы вы делали в этом случае, или забили и сделали статически ? (***.push_back (НашОбъект (аргумент1_для_конструктора, ...)); )
встречный вопрос, а нафига так делать?
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Сортировка идет по какой-то_тип_1 ?
именно

Добавлено через 27 секунд
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Вероятно бред, но забавный.
ответ на все ваши вопросы разом
ШКІПЕР
 Аватар для ШКІПЕР
93 / 93 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
27.01.2012, 21:51  [ТС]     Интересное о vector и map. #6
Цитата Сообщение от retmas Посмотреть сообщение
нужна динамика - можете хранить указатели на объекты, созданные с помощью new, а значит можно потом их delete.
Из всех дорог - это, по-ходу, самая десятая


Цитата Сообщение от retmas Посмотреть сообщение
map< какой-то_тип_2, какой-то_тип_1>
А смысл ? Нужно ведь четкое соответствие.


Цитата Сообщение от diagon Посмотреть сообщение
Разве по тип_1 сортировка? Вроде же по тип_2.
По ключу.


Цитата Сообщение от Jupiter Посмотреть сообщение
таким, нет
Есть же какие-то возможные варианты решения ? Статически созданные будут чистится, а меня интересует - печально ли так все с динамическим вариантом создания ? Поэтому и вопрос "Что бы вы делали в этом случае ?"... если бы вдруг это произошло... .


Цитата Сообщение от Jupiter Посмотреть сообщение
встречный вопрос, а нафига так делать?
Логично. Это фантазия - не более, никто так не заставляет делать, но если есть такая возможность - почему не разобраться ?
Все описанное в 1-ом вопросе - случай, когда есть желание записать данные в вектор непосредственно.

Цитата Сообщение от Jupiter Посмотреть сообщение
именно
Здорово. Но вопрос не в этом. А как не по ключе ? Видимо, все дело в структуре map... и никак иначе.

Цитата Сообщение от Jupiter Посмотреть сообщение
ответ на все ваши вопросы разом
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.01.2012, 21:54     Интересное о vector и map. #7
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Есть же какие-то возможные варианты решения ? Статически созданные будут чистится, а меня интересует - печально ли так все с динамическим вариантом создания ? Поэтому и вопрос "Что бы вы делали в этом случае ?"... если бы вдруг это произошло... .
ответ уже был дан и даже два
1. хранить указатели
2. хранить смарт указатели
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.01.2012, 22:05     Интересное о vector и map. #8
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Есть же какие-то возможные варианты решения ? Статически созданные будут чистится, а меня интересует - печально ли так все с динамическим вариантом создания ? Поэтому и вопрос "Что бы вы делали в этом случае ?"... если бы вдруг это произошло... .
push_back всё равно создаёт копию переданного ей объекта, а все содержимое вектора и так хранится в куче. Поэтому, повторюсь, нет никакого смысла так делать.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.01.2012, 22:09     Интересное о vector и map. #9
Хранить указатели.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.01.2012, 02:43     Интересное о vector и map. #10
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
А как не по ключе ?
Вот вы задумайтесь. Ключ - он на то и ключ, что даёт доступ к тому, что за "дверью". А в чём прелесть map'а? В том, что он позволяет быстро находить значение по ключу. А при сортировке по значению о какой скорости поиска по ключу может идти речь?
К тому же, к внутренней структуре map'а вы не имеете доступа. Так какая вам разница, по какому параметру происходит сортировка?

Не по теме:

P.S. А вы специально шрифт изменяете? Не знаю, кому как, а мне лично такой шрифт глаза режет.

AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
28.01.2012, 21:56     Интересное о vector и map. #11
Я нихрена не читал (пробежался глазами).
Я не проСишник.
Но вот мне просто интересно (предвкушаю FatalFail, но если не спрошу - не узнаю)...
Разве при очищении памяти vector не вызывает деструктор?????
В таком случае вывод - использовать деструктор.

К сожалению, я не компетентен... Поэтому и спрашиваю...

Теперь если случился FATAL FAIL:
1) Что такое умные указатели??!
2) Вот читаю форум, бывает хабр, бывает ещё какие блоги. Там все кажутся такими умными, но почитав луркморе убеждаешься, что это-то на самом деле вряд ли так... Впрочем, я верю, что в луркморе сидят только луркоёбы и все (включая меня) на самом деле умные. Что, блин, за фигня!? Я желать быть кул хакер, но батхарт не даёт =(
3) Собственно, какие достаточно умные книжки можно почитать, чтобы узнать что есть:
3.1. Наследование.
3.2. Множественное наследование.
3.3. Супер множественное наследование.
3.4. over nine thousands times наследование
3.5. Умные указатели.
3.6. Ссылки (я вроде помню, что ссылки - это как настоящий объект, но указатель, то есть юзается без разыменования) и есть ли это то же самое, что умные указатели, или те указатели, это указатели, которые сами удаляют объект при самоудалении.
3.7. Туева хуча других странных слов, вроде абстракции, полиморфизма, прочее, ещё раз прочее и прочее...

Не бейте сильно... Бейте ОЧЕНЬ СИЛЬНО.

Заранее спасибо.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
28.01.2012, 22:02     Интересное о vector и map. #12
Цитата Сообщение от AnyOne697 Посмотреть сообщение
3) Собственно, какие достаточно умные книжки можно почитать, чтобы узнать что есть:
3.1. Наследование.
3.2. Множественное наследование.
3.3. Супер множественное наследование.
3.4. over nine thousands times наследование
3.5. Умные указатели.
3.6. Ссылки (я вроде помню, что ссылки - это как настоящий объект, но указатель, то есть юзается без разыменования) и есть ли это то же самое, что умные указатели, или те указатели, это указатели, которые сами удаляют объект при самоудалении.
3.7. Туева хуча других странных слов, вроде абстракции, полиморфизма, прочее, ещё раз прочее и прочее...
Литература C++
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.01.2012, 22:05     Интересное о vector и map. #13
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Разве при очищении памяти vector не вызывает деструктор?????
вызывается деструктор для каждого объекта, но память за объектом при этом не освободится.
на каждый new в С++ должен быть свой delete.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2012, 22:06     Интересное о vector и map.
Еще ссылки по теме:

C++ STL. Map, vector. Строки
Контейнеры map и vector C++
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
28.01.2012, 22:06     Интересное о vector и map. #14
C++, Level Up!
Давно был на той странице. Видимо ещё такого не было =)

Спасибки!
Yandex
Объявления
28.01.2012, 22:06     Интересное о vector и map.
Ответ Создать тему
Опции темы

Текущее время: 09:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru