Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
1

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

29.04.2016, 18:22. Просмотров 1112. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2016, 18:22
Ответы с готовыми решениями:

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

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

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

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

7
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
29.04.2016, 18:25 2
Вместо указателя запомнить индекс элемента вектора и использовать его для получения доступа к элементу.
0
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 18:43  [ТС] 3
Все же хочется более основательный вариант. Указатель имеющий силу даже после удаления элемента перед тем на который указывает указатель.
0
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
29.04.2016, 18:50 4
Draver, для этого придумали std::list
0
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 19:05  [ТС] 5
cordfield, Можешь привести пример. А то не понимаю как в std::list с указателями работать.
0
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
29.04.2016, 19:17 6
Лучший ответ Сообщение было отмечено Draver как решение

Решение

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
23 / 23 / 5
Регистрация: 02.02.2014
Сообщений: 89
29.04.2016, 19:17 7
В векторе такое никак не сделать в общем случае, так что либо list либо смена подхода (архитектуры).
0
87 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 16
29.04.2016, 19:39  [ТС] 8
Спасибо большое за советы. Я осознал что пытаюсь одеть штаны через голову.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2016, 19:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

Потеря разрешений после восстановления
Добрый день, у меня проблема такая: когда востанавливаю бекап баз данных на сервере. Мысль такая:...

Потеря адресов после перехода на 2.0
После смены редакции с 1.6 на 2.0 в справочнике организации и контрагентов пропали адреса и...

Потеря данных после перезагрузки страницы
На странице main.aspx размещён элемент: &lt;asp:Table runat=&quot;server&quot; Id=&quot;TableId&quot;&gt; ...


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

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

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