Gå til innhold

vector som holder vectorer


Anbefalte innlegg

vector< vector<int> > info;

1. Dette er mulig sant? (Det kompilerer i hvertfall..)

 

2. Hvordan kaller jeg verdiene her? Kunne alltids skrevet en funskjon som itererer seg gjennom info frem til riktig vector for så å kalle riktig intege, men jeg satser på at det går an å gjøre på en enklere måte :hmm:

Lenke til kommentar
Videoannonse
Annonse
vector< vector<int> > info;

1. Dette er mulig sant? (Det kompilerer i hvertfall..)

 

Ja det er mulig

 

2. Hvordan kaller jeg verdiene her? Kunne alltids skrevet en funskjon som itererer seg gjennom info frem til riktig vector for så å kalle riktig intege, men jeg satser på at det går an å gjøre på en enklere måte  :hmm:

8131880[/snapback]

 

 

(info.at(0)).at(0)

bør vel gi deg første element i vektor nr 1 ?

Lenke til kommentar

Dette kanskje hjelper deg litt på vei:

 

#include <iostream>
#include <vector>


int main(void)
{
   int teller;
   std::vector< std::vector<int> > twodimmatrix;
   twodimmatrix.push_back(std::vector<int>());
   for (teller = 1; teller != 9; teller++)
   {
       twodimmatrix[0].push_back(teller);
   }
   for (teller = 0; teller != 8; teller++)
   {
       std::cout << twodimmatrix[0][teller] << std::endl;
   }
   return 0;
}

 

Egentlig ikkeno google kunne ha hjulpet deg med, menmen ;)

 

EDIT: Tab i koden var ikke forumet glad i nei....

Endret av Caps_Lock_kf
Lenke til kommentar

Fordi typen av vectoren er vector. Det betyr at alle elementene i hovedvektoren er av type vector. For å hente det første elementet i begge må du først hente det første elementet i hovedvektoren, for så å hente det første elemementet i vectoren du har hentet fra hovedvectoren. Når man skriver info.at(0) henter du jo en vector, men når du igjen skriver .at(0) så henter du jo et element i vectoren du allerede har hentet opp.

 

Hehe, blir litt vanskelig å forklare, men det er bare å tenke at du først henter et element av typen vector for så å bruke det man har hentet opp og hente opp en int.

Lenke til kommentar

Takk skal du ha kjey.. Det funker :) Man trenger forresten ikke parantesen rundt info.at() ettersom "." er venstregreier :p vet ikke hva det heter på norsk, men sånn at den bruker mest mulig av det som er til venstre og minst mulig av det til høyre..

 

Men en ting! hvor kommer at fra? vanligvis kaller man jo innholdet slik:

info[0]

Lenke til kommentar
Takk skal du ha kjey.. Det funker :) Man trenger forresten ikke parantesen rundt info.at() ettersom "." er venstregreier :p vet ikke hva det heter på norsk, men sånn at den bruker mest mulig av det som er til venstre og minst mulig av det til høyre..

 

Men en ting! hvor kommer at fra? vanligvis kaller man jo innholdet slik:

info[0]

8137223[/snapback]

 

 

info om vector:

http://www.cppreference.com/cppvector/index.html

Lenke til kommentar
Takk, koden info[0][1] funker like bra som info.at(0).at(1) sett bort i fra det med sikkerheten da..

 

Men en ting, er ".at()" tregere å kalle en "[]" ?

8137322[/snapback]

 

Denne tregheten er så ubetydelig at det er verdt den ekstra sikkerheten med bounds-checking. En exception er gull verdt når den kommer i stedet for en stack overflow :p

Lenke til kommentar

Jeg pleier stort sett å bruke iteratorer, men når jeg først bruker indexing må jeg innrømme at jeg vanligvis bruker operator[], selv om dette kanskje ikke er foretrukket. Men, hvis man bruker operator[] fremfor at(), gjør det at man også kan bruke C-style arrays om man ønsker dette, og det kan jo noen ganger være en fordel.

 

Men ja, det er god programmeringsvane å bruke at() fremfor operator[] med mindre man har noen god grunn til ikke å gjøre det. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...