Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 28.03.2009, 23:52   #1
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Создание динамического массива объектов класса

Вообщем погуглил ... и пришол к выводу что такое только реально сделать через указатели, но это очень тормозное решение.

В итоге думаю сделать скажем изначально массив [16], и потом если надо будет еще что то добавить просто сделаю удвоение размера этого же массива - П,С, - думаю лагать не будет и быстрее указателей
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 00:05   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Создание динамического массива объектов класса

Вообщем погуглил ... и пришол к выводу что такое только реально сделать через указатели, но это очень тормозное решение.
любой динамический массив делается через указатели.

если тебе нужен массив с постоянно меняющимся размером, то нужно юзать другие структуры данных. например связанные списки.
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 00:30   #3
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: Создание динамического массива объектов класса

судя по тестам обычный массив работает на порядок быстрее, realloc и vector кто юзал?

или может вообще пихать в структуру
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 01:22   #4
jimon
 
Сообщений: n/a
Ответ: Создание динамического массива объектов класса

Aceton
прочитай хотя бы какую-то книжку для начинающих по C++, рекомендую "C++ за 21 день"
сразу все такие вопросы отпадут, или хотя бы удостоверся что точно и полностью понимаешь что такое обьект, а что такое указатель на обьект, а что такое класс и что такое масив
если тебе плевать на учёбу и нужен результат тут и сразу - используй std::vector
 
Ответить с цитированием
Старый 29.03.2009, 14:17   #5
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: Создание динамического массива объектов класса

не принимай меня за полного нуба))) я прекрасно понимаю что это все значит, просто 5 лет работал на php и прочив веб вещах, сишнег знаю выше уровня нуба
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 15:03   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Создание динамического массива объектов класса

сишнег знаю выше уровня нуба
везет тебе. я тоже хочу знать выше уровня нуба.

Это:
#include <iostream>
#include <conio.h>
#include <windows.h>

int main()
{
		
	__int64 l,fq;
	__int64 t1=0,t2=0;
	__int64 r1=0,r2=0;

	QueryPerformanceFrequency((LARGE_INTEGER*)&fq);

	const int cnt = 250000;
	const int tests = 100;

	int stack_array[cnt]; //массив в стеке
	int *heap_array = new int[cnt]; //массив в куче (через указатели)

	for(int t=0;t<tests;++t)
	{
		// первый тест
		QueryPerformanceCounter((LARGE_INTEGER*)&t1);
		for(int i=0;i<cnt-1;++i)
		{
			stack_array[i]=stack_array[i+1]+2;
		}
		QueryPerformanceCounter((LARGE_INTEGER*)&l);
		r1 += (l-t1);

		// второй тест
		QueryPerformanceCounter((LARGE_INTEGER*)&t2);
		for(int i=0;i<cnt-1;++i)
		{
			heap_array[i]=heap_array[i+1]+2;
		}
		QueryPerformanceCounter((LARGE_INTEGER*)&l);
		r2 += (l-t2);
	}

	std::cout<<"stack array time = "<<(float)r1/(float)fq<<" sec."<<std::endl;
	std::cout<<"heap array time = "<<(float)r2/(float)fq<<" sec."<<std::endl;

	_getch();
	return 0;
}
на моей машине дает такие результаты:
0.0260
0.0272
т.е.да, на стеке массивы быстрее. совсем чуть-чуть но быстрее. но их размеры нельзя менять (более того, их размеры должны быть определены на стадии компиляции). + это значение сильно ограниченно. так, например массив в 300000 элементов уже не создается.
Вложения
Тип файла: zip StackArravVsHeapArray.zip (6.2 Кб, 691 просмотров)

Последний раз редактировалось HolyDel, 29.03.2009 в 15:13.
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 15:20   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Создание динамического массива объектов класса

Сообщение от HolyDel Посмотреть сообщение
везет тебе. я тоже хочу знать выше уровня нуба.
и я!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 16:33   #8
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: Создание динамического массива объектов класса

смотря что понимать под этим уровнем
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 16:41   #9
FDsagizi
Бывалый
 
Аватар для FDsagizi
 
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений
(для 509 пользователей)
Ответ: Создание динамического массива объектов класса

std::vector.
__________________
Жизнь как говориться игра- делать игры моя профессия(с)

Программирование, это религия! Её нужно исповедовать.
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 16:51   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Создание динамического массива объектов класса

мой выбор (если скорость критична) - обычный динамический массив в куче, размером в max элементов. по сути это будет обычным std::vector с reserve(max)
минусом является перерасход памяти
плюсом - скорость и простота.

Последний раз редактировалось HolyDel, 29.03.2009 в 16:59.
(Offline)
 
Ответить с цитированием
Старый 29.03.2009, 19:01   #11
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: Создание динамического массива объектов класса

сделал через map и указатели , вот пример загрузщика карты, правда недоделанный, но рабочий

читает из файла данные и рисует обьекты

#include "../lsd.h"
#include "../blitz3dsdk.h"
#include <fstream>
#include "../player.h"
#include "../terrain.h"
#include "../building.h"
#include <map>
using namespace std;

void CLSD::LoadMap(){
map<int,CBuilding*> buildings;
char buf[128];
char *param;
int i,j=1,p=10;
int item,type,x,y,z,X,Y,Z;

ifstream map;
map.open("D:\\map.map");
if(!map.good()){bbRuntimeError("Can't open map file!");}

while(map.getline(buf,sizeof(buf)))
{

param = strtok (buf," ");
i=0;
while (param!=NULL)
{
bbText(10,p,param);
p=p+10;

switch(i)
{
case 0:
item= atoi(param);
break;
case 1:
type= atoi(param);
break;
case 2:
x=atoi(param);
break;
case 3:
y=atoi(param);
break;
case 4:
z=atoi(param);
break;
case 5:
X=atoi(param);
break;
case 6:
Y=atoi(param);
break;
case 7:
Z=atoi(param);
break;
}
param = strtok (NULL," ");
i++;
}
//в зависимости от типа обьекта находим его описание
//и вызываем нужные классы и создаем обьект

switch(type)
{
case 2:
CBuilding *b = new CBuilding ;
b->CreateBuilding("objects/buildings/box/box.3ds",type,x,y,z,X,Y,Z);
buildings[j]=b;


break;
}
j++;
}



}
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потянет ли MIDlet тысячу небольших экземпляров класса? artemff JAVA Micro Edition 2 27.01.2010 18:24
Обработка массива. Abiron Алгоритмика 5 20.06.2009 01:02
Поворот массива точек SBJoker Алгоритмика 18 10.10.2008 14:48
Вопрос насчет массива и GUI Manfred 2D-программирование 10 22.12.2006 01:41
быстрый FAQ : Создание динамического trianglemesh в physx jimon C++ 0 19.10.2006 18:45


Часовой пояс GMT +4, время: 19:45.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com