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

Как удалить себя из массива vector? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Стек содержащий только положительные числа http://www.cyberforum.ru/cpp-beginners/thread393456.html
Итак, я имею стек вот код: // stack a.cpp : main project file. #include "stdafx.h" #include <cstdlib> #include <iostream> using namespace std;
C++ Пересечение строк матриц Доброго времени суток :) Нужна помощь в составлении кусочка кода, который реализует пересечение строк матриц... Например дано два массива n и m и надо получить третий массив g с общими строками массивов n и m Сидел извращался с вложенными циклами, но ничего хорошего не вышло, поэтому и требуется помощь :( http://www.cyberforum.ru/cpp-beginners/thread393454.html
Конструктор копирования(быстрый вопрос) C++
Вроде бы все просто и логично, но в итоге выполнения B не копируется в A :C why? #include <iostream> using namespace std; class Int { int a; public: Int() {a = 0;} Int(int A) {a = A;}
Неправильная работа с файлами C++
#include <iostream.h> #include <fstream.h> #include <windows.h> #include <string> struct student { char name; char address; int old; //int marks;
C++ Графика с (задача) http://www.cyberforum.ru/cpp-beginners/thread393442.html
Медленное печатание. Заданный текст печатать крупными буквами с некоторыми паузами между буквами, сопровождая каждую букву звуковым щелчком. Перенос осуществлять только целыми словами. Помогите с исходником.
C++ Шаблонная функция Учу c++, в книге приводится вот такой листинг примера работы шаблонной функции, однако он не компилится, выдает ошибку error C2668: swap: неоднозначный вызов перегруженной функции вот сам листинг #include <iostream> #include <conio.h> using namespace std; template<typename T> void swap(T &a,T &b); int main() подробнее

Показать сообщение отдельно
Bers
Заблокирован
28.11.2011, 04:26     Как удалить себя из массива vector?
да, кстати, если нужно удалить только отдельного пассажира из вектора (самого себя), тогда картинка будит немножко другой. Два самых простых варианта:

1. Либо вектор хранит адреса объектов, а не сами объекта.
2. Либо, нужно перегрузить оператор==

Так как у тебя идеологически напрашивается второй вариант, то выглядеть это будит нечто вроде так:


C++
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
26
27
28
29
30
31
32
33
34
#include <algorithm> //нужен для работы со стандартными алгоритмами
                                //хотя у меня алгоритмы пашут и без этого инклуда
 
class CTest
{
public:
    
    std::vector<CTest>*  v;
    void RemoveFromArray()    
    {  
        std::vector<CTest>::iterator it;
        it = std::find (v->begin(), v->end(), *this);
        v->erase(it);  
    };
 
    int operator==(const CTest& istok)
    {
        return (v==istok.v);
    }
};
 
std::vector<CTest> vec;
 
int main()
{
    CTest t; t.v = &vec;
    
    vec.push_back(t);
    vec.push_back(t);
    
    vec[0].RemoveFromArray();
    
    return 0;
}
Из-за того, что при удалении внутри происходит сначала поиск, а потом сдвиг данных, данный алгоритм довольно таки медленный.
Можно придумать что нибудь по-оптимальнее.
 
Текущее время: 14:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru