webForumDet fria alternativet

Dynamisk array

C/C++

12 svar · 1 173 visningar · startad av Alpha II

Medlem sedan maj 20002 993 inlägg
Frågan#1

Jag har en dynamisk array av min egedefinierad typ INIDATA. Hur gör jag för att lägga till ett 'object' till på arrayen?

Medlem sedan juni 200010 432 inlägg
#2

Allokerar mer (nytt) utrymme

Medlem sedan maj 20002 993 inlägg
#3

Hur? Har försökt på lite olika sätt att göra det men akka försök resulterar i att programmet kraschar.

Medlem sedan feb. 20002 300 inlägg
#4

Ta en titt på funktionen realloc().

Med den kan du allokera mer plats i en array. Dvs. du kan utöka storleken på din array med X antal bytes.

Medlem sedan maj 20002 993 inlägg
#5

Jag får det inte att fungera!

void INIFILE::SetKey(char *key, char *value)
{
	int pos;
	if(KeyExist(key,&pos)==true)
	{
		strcpy(section_data[pos].value, value);
	}
	else
	{
		section_keys++;
		section_data = (INIDATA*) realloc(section_data, section_keys * sizeof(INIDATA));
		strcpy(section_data[section_keys].key,key);
		strcpy(section_data[section_keys].value,value);
	}
}

Funderar på om det kanske vore smartare att använda sig av en länkadlista? Eller helt enkelt vara lat och använda färdig kod för att läsa och srkiva ini filer...

Medlem sedan juni 200010 432 inlägg
#6

realloc är en funktion i ett C - lib, så det är bara dumt att blanda in den i C++. Länkad lista är kalas i ditt fall, alternativt allokera nytt med new men det känns onödigt då det redan finns så bra saker i STL :)

Medlem sedan maj 20002 993 inlägg
#7

Får jag lov att programmera min länkadelist själv?

Medlem sedan juni 200010 432 inlägg
#8

Nah! Kolla efter 'container' i STL-länken under relaterade länkar. Du kan ju exempelvis använda std::vector istället för list ;)

Medlem sedan maj 20002 993 inlägg
#9

Så jag inkluderar 'vector' och skapar en vector genom att skriva 'vector<INIDATA> minvector;' ? Kompilatorn gillar inte mitt försök i alla fall ;)

Medlem sedan maj 20002 993 inlägg
#10

Okej. Har lyckats få det att fungera nu och tror jag har kommit på hur vector fungerar :)

Har gjort om helt i min klass efter att ha insett att det blev alldeles för krångligt att göra som jag hade gjort.

Nu har jag ett nytt problem.
Hur sorterar jag vektorn i bokstavsordning efter 'section'?

	struct INIDATA
	{
		char section[256];
		char key[256];
		char value[256];
	};
Medlem sedan juni 200010 432 inlägg
#11

Kolla vidare under STLs containers och på 'sort' och 'compare'. Finns nog en del frågor om detta redan på forumet så sök även här.

Medlem sedan maj 20002 993 inlägg
#12

Oh var lite förvirrad när jag skrev det där. Kom på att jag inte alls behövde sortera någonting. Min ini klass funkar hur bra som helst nu :)

Medlem sedan maj 2004451 inlägg
#13

Tar upp den här tråden igen då den handlade om precis det problem jag själv har.

PeW skrev:

realloc är en funktion i ett C - lib, så det är bara dumt att blanda in den i C++. Länkad lista är kalas i ditt fall, alternativt allokera nytt med new men det känns onödigt då det redan finns så bra saker i STL :)

Borde lära mig använda STL. Kan inte så mycket om det där.

Men om jag nu vill allokera nytt med new.

Jag har en array definierad som

user * users = new user[x]

som medlem i min klass.

I en metod vill jag kunna lägga till ett nytt user-objekt i den. Jag har provat (världens fulaste metod?):

//kopiera från users till tillfällig array: user * temp

delete [] users;

users = new user[nystorlek]

//kopiera från temp till users

Detta fungerar inte särskilt bra. Någon som kan ge mig något tips (förutom STL som jag inte kan sätta mig in i nu bara för den här skoluppgiften).

244 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
115 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
114 ms — ändringar (db)