Контейнеры в С++
|
|
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 |
частый гость
Сейчас нет на сайте
| Спасибо большое. Думаю дальше сам разберусь.
|
|
| |