Sida 1 av 1
En vektor av tal, hur få fram antal element? [LÖST]
Postat: 20 dec 2007, 16:27
av ZerQ
Hej
Jag har en fundering, jag har definierat en int vektor till att rymma 200 element men jag vet att alla inte kommer att användas. Jag fyller på data i vektorn med hjälp av en for slinga.
Nu skulle jag vilja få fram hur många element som finns lagrade i vektorn, tänkte att det borde man ju kunna lösa enkelt men jag kommer inte på det. Finns någon som pusha mig i rätt riktning
/ZerQ
SV: En vektor av tal, hur få fram antal element?
Postat: 20 dec 2007, 16:32
av DrMegahertz
Ett tips, skriv gärna i topic vad det är för språk som du har problem i, på så sätt blir det lättare för dig att få svar!
Men nu antar jag att du menar C++, rätta mig om jag har fel;
Har du definerat en array av int's, alltså;
Isåfall måste du även ha en separat variabel som håller koll på din arrays "storlek", alltså hur många "aktiva" värden du har i den.
Eller har du använt STL-kontainern vector?
Då kan du lätt ta fram storleken på din vektor med medlemsfunktionen size(), på följande sätt;
Observera att med en vektor behöver du inte allokera utrymme i förväg för att kunna lagra tal, eftersom den växer allt eftersom du lägger till nya värden.
SV: En vektor av tal, hur få fram antal element?
Postat: 20 dec 2007, 17:30
av ninetwozero
Jag tror att ZerQ har använt sig utav vector och reserverat utrymme för 200 int:ar.

SV: En vektor av tal, hur få fram antal element?
Postat: 20 dec 2007, 22:22
av per9000
Snackar vi python så blir det:
Snackar vi till exempel C får du ha en hjälpvariabel för varje array som har som enda uppgift att veta hur full den är (och en till för att ha koll på hur mycket minne du har malloc'at). [1] Tips: gör en strukt.
/Per
[1] - för varje gång du glömmer free på en array du malloc'at dödar gud en kattunge.
PS: Jag hade som regel på förra jobbet om filer med C-kod. För varje 1000 rader över de 5000 första raderna kod i en fil var man tvungen att offra ett finger till Malloc (den onda guden Malloc som ni däkert hört talas om). Oj, oj, oj, många fingrar blev det - och många kattungar. Jag är glad att jag jobbar mest i Python nu

SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 10:11
av ZerQ
Ojdå det var inte bra, jag programmerar i ANSI C och deklarerat vektorn som följande
int iVektor[N_ELEMENTS];
Denna skall vara en behållare som jag kan fylla på med data i tills programmet har kört klart och sedan skall jag få fram varje element ur den och skriva ut dom, kruxet är just att jag vill veta hur många element som vektor har lagrat, detta går inte att göra med en fristående variabeln utan jag skulle behöva få fram det direkt ur vektorn.
SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 10:37
av mcNisse
I sådana fall blir du tvungen att hålla reda på positionen själv. Du skulle kunna skapa en strukt
struct iVector {
int iVector[N_ELEMENTS];
int pos = 0;
};
Du får kolla syntaxen. Det var 6 månader sedan jag programmerade C...
SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 11:00
av ZerQ
mcNisse skrev:
I sådana fall blir du tvungen att hålla reda på positionen själv. Du skulle kunna skapa en strukt
struct iVector {
int iVector[N_ELEMENTS];
int pos = 0;
};
Du får kolla syntaxen. Det var 6 månader sedan jag programmerade C...
Det går alltså inte att bara kontrollera vektorn på något sätt för att få fram antalet element i den?
SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 11:03
av mcNisse
Nej, inte pa ett bra satt.
SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 11:50
av nicefinger
Hmm ...
Du tilldelar ju element i en slinga .....
Initiera första elementet till 0 (tex)
Tilldela sen i slingan från och med element nummer 2, lägg antalet tilldelningar i en separat variabel.
När slingan är färdig, lägg denna variabels värde som element nummer 1.
När du sen läser av, kolla element 1 hur många värden det finns, läs sen från element 2.
Eller är det för dumt?
SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 15:03
av Erik Andrén
Om vektorn är sekventiellt påfylld, alltså från början till slutet eller tvärtom går det att göra en for loop som testar varje element om det är null, om inte inkrementera en räknare och fortsätt till nästa element:
Kod: Markera allt
int i, storedElements = 0;
for (i = 0; i < VECTOR_MAX_LEN; i++) {
if (Vector[i] == NULL)
break;
else
storedElements++;
}
printf("Stored elements: %d\n", storedElements);
Dock är den operation ineffektiv då varje element måste kontrolleras. Jag tror dock att C++ STL implementation har samma straff.
SV: En vektor av tal, hur få fram antal element?
Postat: 23 dec 2007, 17:11
av per9000
ZerQ skrev:
[...]
int iVektor[N_ELEMENTS];
[...]
Det man brukar få höra är: "När du skapar vektorn vet du hur lång den är. Glöm inte."
Det är din variabel N_ELEMENTS som är längden på vektorn. Du kan antingen skapa en strukt, eller ha kompis till iVektor, typ "int iVektorLen = N_ELEMENTS" som du aldrig rör. iVektorLen får sedan följa med iVektor överallt så att du inte läser utanför eller så.
/Per
SV: En vektor av tal, hur få fram antal element?
Postat: 31 jan 2008, 09:10
av Vantskruv
Tror det enklast att använda någon typ av lista t.e.x så här:
Kod: Markera allt
std::list<int> iVector;
int v;
int size;
for(int i=0; i<200; i++)
{
if(GetValue(v))
{
iVector.pushback(v);
}//if
}
size = iVector.size();
Koden ovan är ett litet exempel över hur du tilldelar iVector värden. Funktionen GetValue t.e.x. får du om du vill göra själv, den är bara ett exempel.
Det finns en risk att jag skrivet någon funktion i list-klassen fel, kolla upp vad det finns för funktioner i klassen. Det finns också andra klasser som t.e.x. vector (tror jag) m.m..
SV: En vektor av tal, hur få fram antal element?
Postat: 31 jan 2008, 10:43
av christer
Om du har en radda tal någonstans på en kalkylsida, så räknar man med COUNTIF eller
på svenska ANTAL.OM
Exempel ANTAL.OM(A1:A100,">=2")
Beräknar antalet celler i området mellan A1 till A100, men tar med endast
tal som är 2 eller större.
Du ville väl veta hur det är i c++ men råkar nu tycka bättre om Kalkyl.