Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

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

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

27.01.2012, 18:11. Просмотров 1419. Ответов 13
Метки нет (Все метки)

Здравствуйте!

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

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


2. map - как известно, бросая в него что-то оно автоматически сортируется. А как на счет map< какой-то_тип_1, какой-то_тип_2> ? Сортировка идет по какой-то_тип_1 ? В таком случае - как сделать, чтобы сортировалось, например, по какой-то_тип_2 ? Вероятно бред, но забавный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2012, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интересное о vector и map. (C++):

Обращение к элементам vector, который находится в map, находящийся в map - C++
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map &lt;int,map&lt;int,vector&lt;int&gt; &gt;...

Map и vector - C++
Добрый вечер... Пользовался всегда Vector'ами, но решил выучить map. Так вот появился вопрос. Как адекватно использовать map и свои...

Контейнеры map и vector - C++
Есть контейнер map, в нем хранятся символы и коды этих символов(в векторе, в 0 и 1) map&lt;char, vector&lt;bool&gt; &gt; table; Как можно...

Работа с map<.> и vector<.> - C++
Здравствуйте, у меня есть данные, записанные в ассоциативный массив, vector&lt;bool&gt; code; map&lt;char,vector&lt;bool&gt; &gt; table; где...

Конвертирование из vector<string> в map - C++
Здравствуйте! Подскажите, пожалуйста, как из vector&lt;string&gt; считать элементы вектора в map. Изначально дан текстовый файл, в котором...

STL. Map, vector. Строки - C++
Здравствуйте. Почти не знаком с STL. Имеется вектор строк. Нужно найти частоту использования каждой буквы. Я уже который...

13
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
27.01.2012, 18:23 #2
1. нужна динамика - можете хранить указатели на объекты, созданные с помощью new, а значит можно потом их delete.
2. map< какой-то_тип_2, какой-то_тип_1>
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
27.01.2012, 18:43 #3
1. Это утечка. К тому же делать так нет никакого смысла.
2. Никак.
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.01.2012, 18:53 #4
1. Возможно, умные указатели помогут. Но тут я не компетентен.
2. Разве по тип_1 сортировка? Вроде же по тип_2.
Для примера - если создать map< string, int >, где ключом будет слово в тексте, а значением - количество его вхождений в текст, то в map.begin() будет лежать пара с наибольшим значением.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.01.2012, 20:02 #5
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Таким образом в вектор добавляется динамически созданный объект, внимание, вопрос: после создание выделенная память не чистится ?
таким, нет
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
В C# - чистится уборщиком, но в С++ ?
и ещё раз НЕТ!
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Что бы вы делали в этом случае, или забили и сделали статически ? (***.push_back (НашОбъект (аргумент1_для_конструктора, ...)); )
встречный вопрос, а нафига так делать?
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Сортировка идет по какой-то_тип_1 ?
именно

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


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


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


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


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

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

Цитата Сообщение от Jupiter Посмотреть сообщение
ответ на все ваши вопросы разом
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.01.2012, 21:54 #7
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Есть же какие-то возможные варианты решения ? Статически созданные будут чистится, а меня интересует - печально ли так все с динамическим вариантом создания ? Поэтому и вопрос "Что бы вы делали в этом случае ?"... если бы вдруг это произошло... .
ответ уже был дан и даже два
1. хранить указатели
2. хранить смарт указатели
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
27.01.2012, 22:05 #8
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Есть же какие-то возможные варианты решения ? Статически созданные будут чистится, а меня интересует - печально ли так все с динамическим вариантом создания ? Поэтому и вопрос "Что бы вы делали в этом случае ?"... если бы вдруг это произошло... .
push_back всё равно создаёт копию переданного ей объекта, а все содержимое вектора и так хранится в куче. Поэтому, повторюсь, нет никакого смысла так делать.
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.01.2012, 22:09 #9
Хранить указатели.
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.01.2012, 02:43 #10
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
А как не по ключе ?
Вот вы задумайтесь. Ключ - он на то и ключ, что даёт доступ к тому, что за "дверью". А в чём прелесть map'а? В том, что он позволяет быстро находить значение по ключу. А при сортировке по значению о какой скорости поиска по ключу может идти речь?
К тому же, к внутренней структуре map'а вы не имеете доступа. Так какая вам разница, по какому параметру происходит сортировка?

Не по теме:

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

0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
28.01.2012, 21:56 #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. Туева хуча других странных слов, вроде абстракции, полиморфизма, прочее, ещё раз прочее и прочее...

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

Заранее спасибо.
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
28.01.2012, 22:02 #12
Цитата Сообщение от AnyOne697 Посмотреть сообщение
3) Собственно, какие достаточно умные книжки можно почитать, чтобы узнать что есть:
3.1. Наследование.
3.2. Множественное наследование.
3.3. Супер множественное наследование.
3.4. over nine thousands times наследование
3.5. Умные указатели.
3.6. Ссылки (я вроде помню, что ссылки - это как настоящий объект, но указатель, то есть юзается без разыменования) и есть ли это то же самое, что умные указатели, или те указатели, это указатели, которые сами удаляют объект при самоудалении.
3.7. Туева хуча других странных слов, вроде абстракции, полиморфизма, прочее, ещё раз прочее и прочее...
Литература C++
1
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.01.2012, 22:05 #13
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Разве при очищении памяти vector не вызывает деструктор?????
вызывается деструктор для каждого объекта, но память за объектом при этом не освободится.
на каждый new в С++ должен быть свой delete.
0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
28.01.2012, 22:06 #14
C++, Level Up!
Давно был на той странице. Видимо ещё такого не было =)

Спасибки!
0
28.01.2012, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2012, 22:06
Привет! Вот еще темы с ответами:

Синхронизация map и vector. Iterator not incrementable - C++
День добрый. Надо синхронизровать vector и map, чтобы в них были только одинаковые элементы. Вот мой код, который выбрасывает ошибку....

Заполнить контейнер map и vector данными из файла - C++
Текстовый файл содержит в себе информацию о пяти лифтах в виде: 12 900 first 10 600 second 15 700 third 20 1000 fourth 16 800...

STL. vector в map. Ошибки 2039 и 2839 - C++
День добрый. Вот вкратце задание: автоматизированная система на жд вокзале. Храним номер поезда, время отправления и пункт назначения....

std::map, std::vector и порядок обхода коллекции - C++
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru