| Контейнеры в С++ | 
|  | 
| 
| gansterm | Дата: Воскресенье, 20 Мая 2012, 20:36 | Сообщение # 1 |  | частый гость Сейчас нет на сайте | У меня возникла небольшая проблема, необходимо обрабатывать N обьектов. Причем любой обьект можно удалить, добавить и тд. Можете обьяснить по поводу того как это реализовать? |  |  |  |  | 
| 
| Нохчи | Дата: Воскресенье, 20 Мая 2012, 21:11 | Сообщение # 2 |  | заслуженный участник Сейчас нет на сайте | std::vector 
 Многие вопросы по Windows отпадут, если посмотреть тут
 |  |  |  |  | 
| 
| 05142 | Дата: Воскресенье, 20 Мая 2012, 21:28 | Сообщение # 3 |  | постоянный участник Сейчас нет на сайте | Quote (gansterm) любой обьект можно удалить, добавитьstd::list же, хотя можно и вектор
 
 mecinvader
 |  |  |  |  | 
| 
| gansterm | Дата: Воскресенье, 20 Мая 2012, 22:17 | Сообщение # 4 |  | частый гость Сейчас нет на сайте | А как добавлять классы в вектор? vec.assign(1,new test()); нехочет.
 |  |  |  |  | 
| 
| warzes | Дата: Понедельник, 21 Мая 2012, 15:30 | Сообщение # 5 |  |   участник Сейчас нет на сайте | Quote (gansterm) vec.assign(1,new test()); нехочет.почитать что-нибудь про STL вначале. Например книгу C++. Стандартная библиотека. Для профессионалов. Н.Джосьютис
 
 
 Quote (gansterm) А как добавлять классы в вектор?
 Code  std::vector<MyClass*> myclasslist;
 
 ...
 
 MyClass *mc = new MyClass();
 // описываешь экземпляр (например инициализируешь)
 
 myclasslist.push_back(mc);
 
 Но вообще почитай книгу которую я тебе дал, там все по каждому контейнеру описано как заполнять, удалять, заменять, искать. И написано в виде справочника
 
 Мой блог
 Вики  DirectX
 |  |  |  |  | 
| 
| Техник | Дата: Вторник, 22 Мая 2012, 14:15 | Сообщение # 6 |  |   Глава X-ray Games Сейчас нет на сайте | Чтобы добавить класс, сначала надо объявить вектор этого класса 
 Code  std::vector<CClass> mVecClass(MAX_SIZE);//MAX_SIZE = n(n - любое число)
 //...
 CClass* pClass = new CClass;
 //добавление элемента в конец массива
 mVecClass.push_back(&pClass);
 
 |  |  |  |  | 
| 
| Demeron | Дата: Вторник, 22 Мая 2012, 14:28 | Сообщение # 7 |  |   User created in C++ Сейчас нет на сайте | Вот небольшой шаблон класса из моего движка. 
 
 Code template<class _Ty> class elist {
 public:
 _Ty* mem;
 bool* bmem;
 int now;//count
 int step;//step count
 int pn;//optimize
 
 _Ty* operator [](int _Index)
 {
 if (_Index==-1 || !bmem[_Index]) return NULL; else return &mem[_Index];
 }
 
 void create(int _Count=100,int _Step=50)
 {
 _null();
 _resize(_Count);
 step=_Step;
 }
 
 int add(const _Ty& _Item)
 {
 int f;
 bool b;
 f=pn;
 b=false;
 for (int i=f;i<now;i++)
 {
 if (bmem[i]==0)
 {
 //memcpy((void*)&mem[i],(void*)&_Item,sizeof(_Ty));
 mem[i]=_Item;
 bmem[i]=1;
 pn=i;
 return i;
 }
 
 if (i+1==now) {if (b) {_resize();pn=i;} else {b=true;i=0;} continue;}
 }
 
 return -1;
 }
 
 void del(int _Index)
 {
 bmem[_Index]=0;
 }
 
 void delall()
 {
 for (int i=0;i<now;i++)
 bmem[i]=0;
 }
 
 void _free()
 {
 if (mem) free(mem);
 if (bmem) free(bmem);
 _null();
 }
 
 int count()
 {
 return now;
 }
 
 bool empty(int _Index)
 {
 if (_Index<0 || _Index>=now) return 1;
 
 return !bmem[_Index];
 }
 
 void _null()
 {
 mem=0;
 bmem=0;
 now=0;
 pn=0;
 }
 
 void _resize(int _Step)
 {
 bmem=(bool*)realloc(bmem,sizeof(bool)*(now+_Step));
 
 for (int j=now;j<now+_Step;j++)
 bmem[j]=false;
 
 now+=_Step;
 mem=(_Ty*)realloc(mem,now*sizeof(_Ty));
 }
 
 void _resize()
 {
 _resize(step);
 }
 };
 Пример использования:
 
 Code  struct sample//структура для примера
 {
 int a;
 int b;
 float z;
 };
 
 elist<sample> list;//объявляем список
 
 int count;//начальное количество элементов
 int step;//количество добавляемых элементов когда мест хватать не будет
 
 list.create(count,step);//создаем список
 
 sample s;//пример
 s.a=2;
 s.b=11;
 s.z=1.01f;
 
 int ItemID=list.add(s);//добавляем пример в список и записываем его ID в ItemID
 
 sample* gs;
 
 gs=list[ItemID];//получаем указатель на элемент
 if (!gs)//если элемента не существует
 {
 }
 
 list.del(ItemID);//удаляем ячейку с ID==ItemID
 
 list._free;//освобождаем список и память которую он занимает
 
 
 
 Сообщение отредактировал Demeron - Вторник, 22 Мая 2012, 14:37 |  |  |  |  | 
| 
| gansterm | Дата: Вторник, 22 Мая 2012, 16:06 | Сообщение # 8 |  | частый гость Сейчас нет на сайте | Спасибо большое. Думаю дальше сам разберусь. |  |  |  |  |