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

C++

Войти
Регистрация
Восстановить пароль
 
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
#1

Потеря значения итератора после push_back() - C++

29.04.2016, 18:22. Просмотров 217. Ответов 7
Метки нет (Все метки)

Подскажите, как получить указатель на элемент вектора так, чтобы после изменения вектора указатель на элемент не затерся.
C++
1
2
3
4
5
6
7
    std::vector<int> a;
    a.push_back(12);
    std::vector<int>::iterator it;
    it = a.begin();
    int b = it[0];
    a.push_back(13); //Тут interator теряет связь с вектором
    int c = it[0]; //Ошибка
или
C++
1
2
3
4
5
    std::vector<int> a;
    a.push_back(12);
    int *pElement = &a.at(0);
    a.push_back(13); //Тут pElement затирается
    int b = &pElement //Ошибка
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2016, 18:22     Потеря значения итератора после push_back()
Посмотрите здесь:
C++ Теряю ссылку на элемент в std::vector после того, как делаю push_back следующего элемента
C++ Найти ошибку в работе итератора после изменения одной строки
Как определить тип возвращаемого значения шаблонной функции по типу итератора (не auto)? C++
C++ Потеря значения в виртуальной функции
Push_back C++
Push_back(1.) C++
C++ Push_back и стандарт С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cordfield
38 / 38 / 13
Регистрация: 04.05.2014
Сообщений: 168
29.04.2016, 18:25     Потеря значения итератора после push_back() #2
Вместо указателя запомнить индекс элемента вектора и использовать его для получения доступа к элементу.
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 18:43  [ТС]     Потеря значения итератора после push_back() #3
Все же хочется более основательный вариант. Указатель имеющий силу даже после удаления элемента перед тем на который указывает указатель.
cordfield
38 / 38 / 13
Регистрация: 04.05.2014
Сообщений: 168
29.04.2016, 18:50     Потеря значения итератора после push_back() #4
Draver, для этого придумали std::list
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 19:05  [ТС]     Потеря значения итератора после push_back() #5
cordfield, Можешь привести пример. А то не понимаю как в std::list с указателями работать.
cordfield
38 / 38 / 13
Регистрация: 04.05.2014
Сообщений: 168
29.04.2016, 19:17     Потеря значения итератора после push_back() #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C итераторами.
C++
1
2
3
4
5
6
std::list<int> a;
a.push_back(12);
std::list<int>::iterator it;
it = a.begin();
a.insert(a.end(), 13);
int c = *it;
warhast
11 / 11 / 3
Регистрация: 02.02.2014
Сообщений: 55
29.04.2016, 19:17     Потеря значения итератора после push_back() #7
В векторе такое никак не сделать в общем случае, так что либо list либо смена подхода (архитектуры).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2016, 19:39     Потеря значения итератора после push_back()
Еще ссылки по теме:
Boost C++ MPL push_back
C++ Vector . push_back
push_back vs emplace_back C++
Про list push_back C++
C++ Std push_back сумасшедший!

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

Или воспользуйтесь поиском по форуму:
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 19:39  [ТС]     Потеря значения итератора после push_back() #8
Спасибо большое за советы. Я осознал что пытаюсь одеть штаны через голову.
Yandex
Объявления
29.04.2016, 19:39     Потеря значения итератора после push_back()
Ответ Создать тему
Опции темы

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