|
|
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
дого искал как это делается, нашел такой вариант: Код: plaintext 1. 2. 3. 4. 5. и такая кнострукция компилится у меня а MinGW gcc 3.2.2 вроде а вот msvc6 и gcc2.95.3(FreeBSD) не хотят пришлось делать так: Код: plaintext 1. 2. 3. 4. 5. 6. и так работает и в msvc6 и в gcc2.95.3 А прощще можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2004, 11:02 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2004, 11:15 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Это я в помощь себе :-) а утебя такой же вопрос, это по поводу кнопочек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2004, 12:35 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2004, 13:07 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Код: 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. Теперь замечание по существу. Зачем вектор указателей, когда вектор строк и безопасней и надеждней?: Код: plaintext 1. 2. 3. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 13:29 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Насчет вектора строк заместо вектора указателей. Может ты и прав, да только я не догоняю, как туда добавлять элементы :-) если у меня есть объект string s; то он существует в контексте одного блока, разве нет? и удалится автомтически, при выходе из блока. или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 13:37 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Ну и что? Ведь в вектор попадает его копия - разве нет?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 13:42 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Что происходит при добавлении проиллюстрирует следующий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 13:47 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
2 Анатолий Широков Теперь замечание по существу. Зачем вектор указателей, когда вектор строк и безопасней и надеждней? На самом деле, я бы то же поостерёгся использовать вектор строк. Потому что я не знаю внутренности класса строки. Даже если и не происходит "глубокого" копирования, то мне не совсем понятно как класс std::basic_string хранит список частей строк? Ведь насколько мне известно, станларт не обязывает хранить строку одним куском в памяти. И вот тут то и возникают сомнения, что "проще", с одной стороны хранить вектор указателей (очень быстро), а с другой вроде бы и лучше вектор строк (медленно, но бонус в качестве алгоритмов). А как показывает практика - русскому человеку проще изобрести велосипед, но чтобы он ездил очень быстро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 20:27 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
по поводу строк, к стати. в оригинальной задаче у меня не строки а объекты интерфейса :-) так что, хранить я буду ссылки. а строки это я для примера привел. чтоб понятней было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 21:56 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
В случае необходимости хранить в STL контейнерах указатели на объекты я бы советовал сначало посмотреть чем это черевато (т.е. узнать все подводные камни - их не так уж много - но они могут впервую удивить) Во-вторых - я бы посмотрел в сторону умных указателей (aka smart pointers) и существующие их реализации (например loki) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 22:25 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
А можно в кратце, в двух словах, что такое смартпоинтеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 03:53 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
В двух словах - это объект, который ведет себя как указатель (т.е. у него перегружены соответсвующие операции) Такие объекты можно использовать вместо обычных указателей на объекты т.к. кроме функциональности непосредственно указателей еще и такие сервисы как автоматический контроль кол-ва ссылок и своевременное автоматическое удаление объектов на которые указывают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 10:04 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
прикольно :-) loki, это та библиотека на которую vdimas ссылку давал в топике про "не дайте умереть с++" или что-то такое подобное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 10:13 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
может быть - тут на нее кучу ссылок давали - и заслуженно. Loki - это библиотека классов которая была написана для книги "Modern C++ Design" Andrei Alexandrescu. Она как раз и демонстрирует generic programming и design patterns ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 10:18 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
за неплохими смарт-поинтерами можно ко мне на мыло. ---- генерят самый экономный код в release, лучше чем бустовские и локиевские, работают вообще со всеми контейнерами - STL, MFC, ATL, а так же имеются разновидности для COM. (автоматические неявные QueryInterface для преобразований типов и пр. прелести). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 11:08 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
vdimas Я правильно понял что это что-то типа _COM_SMARTPTR + Loki smart ptr? Если да то это интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 11:12 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
--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); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 18:51 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
не... мне нужно было удалить не по индексу, а по самому объекту. я храню ссылки на элементы управления, и при определенном событии мне нужно удалить контрол из списка. такой вариант я уже находил в сети, но все равно спасибо за участие. пока думаю на тему смартпойнтеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 18:56 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Шёл на работу (или с работы?..) Подумалось: надо сделать надстройку над классом, и запихать туда указатель на итератор :) vector<чё-тут?>::iteraor m_pIteratorMe; ... то есть push_back(MyObj); MyObj.m_pIteratorMe = vStr.end(); ... потом просто vStr.erase(MyObj.m_pIteratorMe); как вам такой вариант? Заодно расскажите что есть смартпоинтеры :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2004, 16:20 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Да уж рассказывал... http://www.sql.ru/forum/actualpost.aspx?bid=21&tid=73180&mid=0&p=1#526567 vStr.erase(MyObj.m_pIteratorMe); сделать можно - вопрос для чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2004, 17:02 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
Про смартпоинтеры понял, тока не совсем ясно как их тут применить. funikovyuriсделать можно - вопрос для чего? Ну так человек просил придумать способ, чтоб не перебирать вектор для поиска удаляемого элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2004, 10:19 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
А вот если я понял то происходит это ... сейчас поясню :) такс есть у нас 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-й итд. или нельзя , или это абсурд ? ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2004, 12:32 |
|
||
|
vector и удаление произвольного элемента
|
|||
|---|---|---|---|
|
#18+
они и так перемещаются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2004, 12:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32401527&tid=2035409]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 421ms |

| 0 / 0 |
