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

Удаления элемента Vector-а по имени - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа с использованием функций и ошибка [BCC32 Error] File1.c(2): E2293 ) expected http://www.cyberforum.ru/cpp-beginners/thread1102383.html
Нужно написать программу с использованием функцый, вроде все правильно написал но выдает ошибку " File1.c(2): E2293 ) expected" подскажите где я накосячил #include <stdio.h> void Input(int& a, int k) {for (int i=1;i=k;i++) {printf("Vvedit ochinku $i suddi"); scanf("%d",a); } } //------------ void DelMin(int& a, int k)
C++ Напишите программу, которая создает массив из трех структур CandyBar Добрый Вечер! Выполните упражнение б, но вместо объявления массива из трех структур CandyBar используйте операцию new для динамического размещения массива. P.S. Упражнение №6 Структура CandyBar включает три члена, как описано в предыдущем упражнении. Напишите программу, которая создает массив из трех структур CandyBar, инициализирует их значениями по вашему усмотрению и затем... http://www.cyberforum.ru/cpp-beginners/thread1102363.html
C++ Описать класс для вычисления суммы непарных элементов массива
Задача. Описать класс для решения поставленной задачи (сума непарных елементов). В классе предусмотреть: 1. Дополнительный конструктор. 2. Метод автоматической инициализации массива в заданном пользователем диапазоне. 3. Ввод элементов массива с клавиатуры. 4. Метод, который возвращает значение в соответствии с вариантом. При работе программы пользователь выбирает сам способ заполнения...
C++ Узнать когда и какая кнопка была нажата и когда была отпущенна
Привет, программирую в Code::Blocks + wxWidgets 2.8.12 Хочу сделать там что-то вроде компонента HotKey в былдере. Но для этого нужно узнать когда была нажата/отпущенна клавиша, как сделать такую проверку ? Делал так: BYTE by = {0}; if(GetKeyboardState(by)) { if(by != 0 || by != 0) //TextCtrl1->AppendText(L"Press... key CTRL");
C++ Аналог sprintf http://www.cyberforum.ru/cpp-beginners/thread1102336.html
Здравствуйте! Допустим есть функция которая наращивает строку, добавлением строки/символа/числа или остальных объектов из которых можно "вытянуть" что-нибудь, что можно назвать строкой/символом. Я знаю sprintf который записывает в выбранный буфер получившуюся строку, но в нём нужно явно указывать тип того, что нужно преобразовать в строку аналогично как в выводе printf, например для целого числа...
C++ Составить программу для вычисления произведения чисел из диапазона от а до b, кратных 5 Помогите пожалуйста написать программу для вычисления произведения чисел из диапазона от а до b, кратных 5 циклами while и do while. подробнее

Показать сообщение отдельно
DrOffset
6461 / 3835 / 885
Регистрация: 30.01.2014
Сообщений: 6,630
21.02.2014, 22:29     Удаления элемента Vector-а по имени
Цитата Сообщение от Devilox Посмотреть сообщение
DrOffset, мне нужно осуществить то же удаление, что и при вызове .erase(i), но по указателю(если, конечно, это возможно).
В случае вектора можно получить индекс элемента просто посчитав разницу указателей:
C++
1
size_t index = std::distance(&vec[0], ptr);
где ptr - искомый для удаления указатель.

Но здесь скрыта еще одна проблема. Т.к. вектор хранит свои элементы в непрерывной памяти, при добавлении новых элементов сохраненные указатели на элементы могут стать невалидными. В случае итератора на элемент вектора - произойдет тоже самое.
Тут есть несколько вариантов.
Можно сменить тип контейнера на тот, который не инвалидирует итераторы при добавлении. Например std::list (соответственно использовать итераторы list).
Либо можно сменить тип указателя на элемент на что-нибудь независимое, например на индекс.
Можно в векторе вообще не хранить объекты, а хранить только указатели на них. Но тогда для поиска значения по указателю придется делать цикл по всем элементам. А в конце еще пробежаться по содержимому и вызвать всем delete.
Каждый из вариантов потребует переписывания функций удаления\добавления.
 
Текущее время: 15:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru