powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / vector и удаление произвольного элемента
25 сообщений из 25, страница 1 из 1
vector и удаление произвольного элемента
    #32401527
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дого искал как это делается, нашел такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
vector <string*> v;
...
string *s;//strig for deleting
vector<string*>::iterator i=find(v.begin(),v.end(),s);
v.erase(i);

и такая кнострукция компилится у меня а MinGW gcc 3.2.2 вроде

а вот msvc6 и gcc2.95.3(FreeBSD) не хотят

пришлось делать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
vector <string*> v;
...
string *s;//strig for deleting
for (vector <string*>::iterator i=v.begin();i!=v.end();i++)
  if (*i==s)
    v.erase(i,i);


и так работает и в msvc6 и в gcc2.95.3

А прощще можно?
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401532
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ты в помощь мне ???
а то у мя такой же вопрос

____
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401556
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я в помощь себе :-) а утебя такой же вопрос, это по поводу кнопочек?
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401571
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу :)

а точнее вчера вечером задумался а как удалить какойнить элеиент из вектора ...
____
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401854
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
//
//  удаление элементов из вектора указателей на string
//
#include <algorithm>
#include <string>
#include <vector>

struct special_equal_to
{
     const std::string &a;

     explicit special_equal_to(const std::string &a) : a(a) {}

     bool operator()(const std::string *b) const
     {
            return (a == (*b));
     }     
};

...

std::vector<std::string *> v;
std::string s;
...
v.erase(std::remove_if(v.begin(), v.end(), special_equal_to(s)), v.end());


Теперь замечание по существу. Зачем вектор указателей, когда вектор строк и безопасней и надеждней?:

Код: plaintext
1.
2.
3.
std::vector<std::string> v;
...
v.erase(std::remove(v.begin(), v.end(), s), v.end());


Удачи.
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401857
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет вектора строк заместо вектора указателей.

Может ты и прав, да только я не догоняю, как туда добавлять элементы :-)

если у меня есть объект
string s;
то он существует в контексте одного блока, разве нет? и удалится автомтически, при выходе из блока.

или как?
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401858
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что?

Ведь в вектор попадает его копия - разве нет?:)
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401859
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что происходит при добавлении проиллюстрирует следующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class tracer
{
public:
     tracer() {std::cout <<  "tracer::ctor"  << std::endl;}
     tracer(const tracer &other) { std::cout <<  "tracer::copy_ctor"  << std::endl;}
     ~tracer() {std::cout <<  "tracer::dtor"  << std::endl;}
};

...
std::vector<tracer> v;
v.push_back(tracer());
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401979
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Анатолий Широков
Теперь замечание по существу. Зачем вектор указателей, когда вектор строк и безопасней и надеждней?

На самом деле, я бы то же поостерёгся использовать вектор строк. Потому что я не знаю внутренности класса строки. Даже если и не происходит "глубокого" копирования, то мне не совсем понятно как класс std::basic_string хранит список частей строк? Ведь насколько мне известно, станларт не обязывает хранить строку одним куском в памяти. И вот тут то и возникают сомнения, что "проще", с одной стороны хранить вектор указателей (очень быстро), а с другой вроде бы и лучше вектор строк (медленно, но бонус в качестве алгоритмов). А как показывает практика - русскому человеку проще изобрести велосипед, но чтобы он ездил очень быстро
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32401997
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу строк, к стати.

в оригинальной задаче у меня не строки а объекты интерфейса :-)
так что, хранить я буду ссылки.

а строки это я для примера привел. чтоб понятней было
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402002
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В случае необходимости хранить в STL контейнерах указатели на объекты я бы советовал сначало посмотреть чем это черевато (т.е. узнать все подводные камни - их не так уж много - но они могут впервую удивить)

Во-вторых - я бы посмотрел в сторону умных указателей (aka smart pointers) и существующие их реализации (например loki)
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402052
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно в кратце, в двух словах, что такое смартпоинтеры?
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402186
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В двух словах - это объект, который ведет себя как указатель (т.е. у него перегружены соответсвующие операции)
Такие объекты можно использовать вместо обычных указателей на объекты т.к. кроме функциональности непосредственно указателей еще и такие сервисы как автоматический контроль кол-ва ссылок и своевременное автоматическое удаление объектов на которые указывают
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402204
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прикольно :-)
loki, это та библиотека на которую vdimas ссылку давал в топике про "не дайте умереть с++" или что-то такое подобное?
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402213
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть - тут на нее кучу ссылок давали - и заслуженно. Loki - это библиотека классов которая была написана для книги "Modern C++ Design" Andrei Alexandrescu. Она как раз и демонстрирует generic programming и design patterns
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402313
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за неплохими смарт-поинтерами можно ко мне на мыло.

----
генерят самый экономный код в release, лучше чем бустовские и локиевские, работают вообще со всеми контейнерами - STL, MFC, ATL, а так же имеются разновидности для COM. (автоматические неявные QueryInterface для преобразований типов и пр. прелести).
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32402326
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdimas

Я правильно понял что это что-то типа _COM_SMARTPTR + Loki smart ptr? Если да то это интересно...
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32403330
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--vector и удаление произвольного элемента

vector<String> lst[3];
lst.push_back("aa"); lst.push_back("bb"); lst.push_back("cc");
int idx = 1; // 2-й элемент
lst.erase(lst.begin() + idx);
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32403331
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не...
мне нужно было удалить не по индексу, а по самому объекту.
я храню ссылки на элементы управления, и при определенном событии мне нужно удалить контрол из списка.

такой вариант я уже находил в сети, но все равно спасибо за участие.
пока думаю на тему смартпойнтеров
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32407411
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шёл на работу (или с работы?..)

Подумалось: надо сделать надстройку над классом, и запихать туда указатель на итератор :)

vector<чё-тут?>::iteraor m_pIteratorMe;
...
то есть
push_back(MyObj);
MyObj.m_pIteratorMe = vStr.end();
...
потом просто
vStr.erase(MyObj.m_pIteratorMe);

как вам такой вариант? Заодно расскажите что есть смартпоинтеры :)
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32407486
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж рассказывал...
http://www.sql.ru/forum/actualpost.aspx?bid=21&tid=73180&mid=0&p=1#526567

vStr.erase(MyObj.m_pIteratorMe);
сделать можно - вопрос для чего?
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32408146
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про смартпоинтеры понял, тока не совсем ясно как их тут применить.

funikovyuriсделать можно - вопрос для чего?
Ну так человек просил придумать способ, чтоб не перебирать вектор для поиска удаляемого элемента.
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32408477
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот если я понял то происходит это ...
сейчас поясню :)

такс есть у нас std::vector<MyObject*> v;

v.insert(v.begin(),new MyObject);
...
...

теперь удалеем 5-й элемент (пусть мы запихали уже 10 обьектов в вектор)

int index = 4;
v.erase(v.begin()+index);

и теперь если мы обратимся к 6 элементу то
будет как и прежде v[5] ??

а как бы сделать так чтобы в векторе они перемещались ?
тоесть если я удалил 5-й элемент на его место встал 6-й, на 6-й встал 7-й итд.
или нельзя , или это абсурд ?

____
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32408553
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
они и так перемещаются :)
...
Рейтинг: 0 / 0
vector и удаление произвольного элемента
    #32408615
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri

точно ???

странно но я не заметил этого ...
надо бы посмотреть

____
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / vector и удаление произвольного элемента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]