webForumDet fria alternativet

Dynamisk array

12 svar · 1 172 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 993 inlägg
#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?

PeWMedlem sedan juni 200010 432 inlägg
#2

Allokerar mer (nytt) utrymme

Alpha IIMedlem 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.

PhorpherMedlem 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.

Alpha IIMedlem 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...

PeWMedlem 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 :)

Alpha IIMedlem sedan maj 20002 993 inlägg
#7

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

PeWMedlem 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 ;)

Alpha IIMedlem 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 ;)

Alpha IIMedlem 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];
	};
PeWMedlem 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.

Alpha IIMedlem 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 :)

TinwëlintMedlem 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).

137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)