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

C++

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

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

29.04.2016, 18:22. Просмотров 220. Ответов 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 //Ошибка
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2016, 18:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потеря значения итератора после push_back() (C++):

Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. - C++
Добрый день. Начал изучать шаблоны и сразу же возникло 2 проблемы: 1).На Строке в мейне SArr&lt;short&gt; ar1(100); Выдается ошибка...

Перегрузка операции для итератора - Visual C++
Здравствуйте, назрела такая проблема - не перегружается оператор или я неправильно использую перегрузку - 3 дня мучаюсь, уже надоедает,...

Теряю ссылку на элемент в std::vector после того, как делаю push_back следующего элемента - C++
Добрый день! Подскажите пожалуйста в чем причина моей ошибки. Сам работал на чистом C++, то есть использовал все по минимуму из C++. В...

Найти ошибку в работе итератора после изменения одной строки - C++
Решил переписать код: for(vector&lt;string&gt;::iterator iter1(f1.begin()); ++iter1 != f1.end(); cout &lt;&lt; &quot;\b\b\b\b\b\b\b&quot; &lt;&lt; 0.01*(2000...

Как определить тип возвращаемого значения шаблонной функции по типу итератора (не auto)? - C++
Здравствуйте. Есть шаблонная функция (например, суммирования). Входные значения два итератора -- начало конец. template &lt;typename...

Потеря значения в виртуальной функции - C++
Подскажите что не так, вывод должен быть 1 и 5. class cBase { public: int i, f; virtual void addI() { i = 0; f = 5; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cordfield
42 / 42 / 15
Регистрация: 04.05.2014
Сообщений: 181
29.04.2016, 18:25 #2
Вместо указателя запомнить индекс элемента вектора и использовать его для получения доступа к элементу.
0
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 18:43  [ТС] #3
Все же хочется более основательный вариант. Указатель имеющий силу даже после удаления элемента перед тем на который указывает указатель.
0
cordfield
42 / 42 / 15
Регистрация: 04.05.2014
Сообщений: 181
29.04.2016, 18:50 #4
Draver, для этого придумали std::list
0
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 19:05  [ТС] #5
cordfield, Можешь привести пример. А то не понимаю как в std::list с указателями работать.
0
cordfield
42 / 42 / 15
Регистрация: 04.05.2014
Сообщений: 181
29.04.2016, 19:17 #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;
0
warhast
11 / 11 / 3
Регистрация: 02.02.2014
Сообщений: 55
29.04.2016, 19:17 #7
В векторе такое никак не сделать в общем случае, так что либо list либо смена подхода (архитектуры).
0
Draver
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 19:39  [ТС] #8
Спасибо большое за советы. Я осознал что пытаюсь одеть штаны через голову.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2016, 19:39
Привет! Вот еще темы с ответами:

Push_back - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;iterator&gt; #include &lt;algorithm&gt; using namespace std; int main() { ...

Тело метода не может быть блоком итератора, так как "void" не является типом интерфейса итератора - C#
using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System.Collections; using System; public...

Потеря адресов после перехода на 2.0 - 1С
После смены редакции с 1.6 на 2.0 в справочнике организации и контрагентов пропали адреса и отображаются места их ввода, кто может...

Потеря 1ГБ оперативки после ремонта - Ремонт ноутбуков
Все началось после того, как у меня на ноуте просто при работе выскакивалие квадратики различные(разноцветные) просто стоя не трогая его...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.04.2016, 19:39
Ответ Создать тему
Опции темы

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