En vektor av tal, hur få fram antal element? [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
ZerQ
Inlägg: 160
Blev medlem: 01 aug 2007, 08:40
OS: Annat GNU/Linux
Ort: Ornsköldsvik
Kontakt:

En vektor av tal, hur få fram antal element? [LÖST]

Inlägg 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
Senast redigerad av 1 DrMegahertz, redigerad totalt 31 gånger.
Säljer massa saker kolla in min hemsida http://www.befta.com
Användarvisningsbild
DrMegahertz
Inlägg: 296
Blev medlem: 06 maj 2006, 14:37
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS
Ort: Södra Dalarna

SV: En vektor av tal, hur få fram antal element?

Inlägg 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å;

Kod: Markera allt

int array[200];
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?

Kod: Markera allt

vector<int> vektor;
Då kan du lätt ta fram storleken på din vektor med medlemsfunktionen size(), på följande sätt;

Kod: Markera allt

vektor.size();
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.
BildAre you shpongled? Bild
Användarvisningsbild
ninetwozero
Inlägg: 973
Blev medlem: 07 feb 2007, 22:43
OS: Ubuntu
Utgåva: 6.06 Dapper LTS
Ort: ---

SV: En vektor av tal, hur få fram antal element?

Inlägg av ninetwozero »

Jag tror att ZerQ har använt sig utav vector och reserverat utrymme för 200 int:ar.

Kod: Markera allt

vector<int> vektor(200);
:)
Användarvisningsbild
per9000
Inlägg: 931
Blev medlem: 07 maj 2007, 11:06
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Västerås
Kontakt:

SV: En vektor av tal, hur få fram antal element?

Inlägg av per9000 »

Snackar vi python så blir det:

Kod: Markera allt

arr = [3, 4, 5]
print len(arr)
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 :)
--
Per Erik Strandberg
Yet Another IT Consultant
Användarvisningsbild
ZerQ
Inlägg: 160
Blev medlem: 01 aug 2007, 08:40
OS: Annat GNU/Linux
Ort: Ornsköldsvik
Kontakt:

SV: En vektor av tal, hur få fram antal element?

Inlägg 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.
Säljer massa saker kolla in min hemsida http://www.befta.com
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

SV: En vektor av tal, hur få fram antal element?

Inlägg 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...
KDE 4.5 SC är ute i det fria!!! Tjoho

Stagnation is good for nobody - after all if you don't progress you end up with gnome
Användarvisningsbild
ZerQ
Inlägg: 160
Blev medlem: 01 aug 2007, 08:40
OS: Annat GNU/Linux
Ort: Ornsköldsvik
Kontakt:

SV: En vektor av tal, hur få fram antal element?

Inlägg 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?
Säljer massa saker kolla in min hemsida http://www.befta.com
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

SV: En vektor av tal, hur få fram antal element?

Inlägg av mcNisse »

Nej, inte pa ett bra satt.
KDE 4.5 SC är ute i det fria!!! Tjoho

Stagnation is good for nobody - after all if you don't progress you end up with gnome
Användarvisningsbild
nicefinger
Inlägg: 1800
Blev medlem: 14 jul 2006, 08:18
OS: Annat GNU/Linux
Utgåva: 23.04 Lunar Lobster
Ort: Uddevalla

SV: En vektor av tal, hur få fram antal element?

Inlägg 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?
Kolsyrat gangesvatten, socker, målarfärgämne (sockerkulör), surhetsgivande medel (saltsyra), dioxin, konservmedel (E211), du-är-så-sötningsmedel (E952), arom, oxidationsmedel.
Användarvisningsbild
Erik Andrén
Inlägg: 227
Blev medlem: 21 okt 2006, 22:20
Ort: Uppsala
Kontakt:

SV: En vektor av tal, hur få fram antal element?

Inlägg 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.
Användarvisningsbild
per9000
Inlägg: 931
Blev medlem: 07 maj 2007, 11:06
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Västerås
Kontakt:

SV: En vektor av tal, hur få fram antal element?

Inlägg 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
--
Per Erik Strandberg
Yet Another IT Consultant
Användarvisningsbild
Vantskruv
Inlägg: 115
Blev medlem: 24 jun 2007, 13:43
OS: PCLinuxOS
Utgåva: 16.04 Xenial Xerus LTS

SV: En vektor av tal, hur få fram antal element?

Inlägg 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..
Senast redigerad av 1 Vantskruv, redigerad totalt 31 gånger.
/* Det finns inga Minor för Svärdet *\
Användarvisningsbild
christer
Inlägg: 1362
Blev medlem: 11 jan 2007, 17:42
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

SV: En vektor av tal, hur få fram antal element?

Inlägg 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.
Skriv svar

Återgå till "Programmering och webbdesign"