-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
||||||
1 | ||||||
Как передавать ссылку на структуру в map?13.05.2012, 01:21. Показов 7549. Ответов 22
Метки нет (Все метки)
Надо два контейнера один вектор со структурами второй мап с сылками на те структуры.
Но вот проблема в map<int, Test*> itag после новой записи предыдущая ссылка ведет на непонятную структуру в которой itag[key]->t = <неверный указатель а itag[key]->i = переполнение; Я возможно не совсем понял основу. На манах просидел чета не найду подходящего примера. пробовал и через инссерт тоже самое. Подскажите как правильно? спс!
0
|
13.05.2012, 01:21 | |
Ответы с готовыми решениями:
22
Как передавать структуру в функцию? Как передавать структуру в массив? Можно ли передавать ссылку процедуры как параметр? Как передавать ссылку на экземпляр класса между Activity? |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
13.05.2012, 02:03 | 2 |
Всё просто. В векторе после push_back() может происходить перераспределение памяти и тогда все итераторы, ссылки и указатели на элементы этого вектора становятся недействительными. Решение первое: сначала создать и заполнить весь вектор целиком, а только потом запихивать ссылки на элементы в мап. Решение второе: обеспечить достаточный размер вектора перед вставками путём вызова data.reserve(сколько_надо_элементов).
1
|
13.05.2012, 02:07 | 3 |
Ну вектор такая подлая вещь что может твой элемент перенести из одного места(памяти) в другое при расширении используя конструктор копий.
Как вариант создавать vector<Test*> data; а структуры динамически
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
13.05.2012, 02:07 | 4 |
Но, кажется, здесь ещё одна ошибка:
если data.back() возвращает копию, а не ссылку. Но тут я не помню, надо в стандарт слазить.
0
|
13.05.2012, 02:10 | 5 |
0
|
-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
|
13.05.2012, 02:12 [ТС] | 6 |
grizlik78, Полюбом спс. Я читал за вектор как он работает с памятью но как то вылетело из головы.
Я новичок в С++ две недели как знаком с ним. Перед этим на пыхе плотно кодил здесь сложнее воспринимается так как с памятью уже сам работаю. Добавлено через 2 минуты Avazart, Вообщето я извлекал ссылку &data.back(); P.S. Я видел этот сайт и перечитал раза 5 все методы.
0
|
-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
|
13.05.2012, 02:16 [ТС] | 8 |
А я понял. в смысле работа будет не с самой структурой с вектора а с копией ?
Добавлено через 1 минуту Avazart, Сори ты был прав. Сейчас протестирую влияние через ссылку
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
13.05.2012, 02:21 | 9 |
Удаление из хвоста не вызывает. Удаление из середины делает недействительными ссылки, итераторы и указатели на элементы начиная с удаляемого.
Добавлено через 2 минуты Да, но это если бы .back() возвращал не ссылку.
0
|
-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
||||||
13.05.2012, 02:25 [ТС] | 10 | |||||
Таки нет, действует Влияние на ссылку извлеченную с возврата vector::back();
Собственно я повлиял таким тестом.
Но все же вывод таков что ссылкой пользоваться нежелательно в таком случае так как при увеличении массива ссылки поменяются
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
13.05.2012, 02:27 | 11 |
TLENS, постарайся ещё разобраться что есть ссылка, а что указатель. Это очень близкие понятия, но не одно и то же.
0
|
13.05.2012, 02:27 | 12 | |||||
1
|
-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
||||||
13.05.2012, 02:41 [ТС] | 13 | |||||
Каким образом структура сменилась?
Добавлено через 3 минуты grizlik78, Я как раз так и подумал уже начал искать ман по указателях)) Указатель например передается в функцию таким образом
Это и есть указатель? Добавлено через 6 минут Ладно всем спасибо. Все понял.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
13.05.2012, 02:43 | 14 | |||||
Если t название типа структуры, то это как-раз передача по ссылке.
1
|
13.05.2012, 02:47 | 15 | |||||
Указатель- переменная содержащая адрес расположения другой переменной
Вариант с указателями
0
|
-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
|
13.05.2012, 02:56 [ТС] | 16 |
А я спутал местами ссылку и указатель.
Добавлено через 4 минуты grizlik78, Все я это понимаю. Подумал что int *p Это ссылка а int & p это указатель.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
13.05.2012, 02:59 | 18 |
Ладно, раз понимаешь, тогда постараюсь запутать. В моём коде &abc это указатель, а *p это, фактически, безымянная ссылка
0
|
-6 / 3 / 0
Регистрация: 11.10.2011
Сообщений: 81
|
|
13.05.2012, 03:02 [ТС] | 19 |
Секунду
Добавлено через 1 минуту Хм....
0
|
13.05.2012, 03:09 | 20 |
Я б не прочь, но возможно стоит создать новую тему, а то админы ругаться могут...
Добавлено через 2 минуты Кстати если не кртично то можно было бы использовать std::list<> вместо вектора решив проблему порчи имущества Добавлено через 3 минуты grizlik78 из-за подобных вещей как я пологаю С# объекты ссылочного типа...
0
|
13.05.2012, 03:09 | |
13.05.2012, 03:09 | |
Помогаю со студенческими работами здесь
20
Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные? Как передать ссылку на структуру в поток? Как передать в функцию ссылку на структуру? Передавать не ссылку, а объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |