9. Vectors

Vectors zijn dynamische arrays. Voordeel is dat je niet van te voren de grootte van je array hoeft te bepalen maar dat de grootte dynamisch tijdens je programma aanpast. Nadeel is dat het iets minder efficiënt is.

Voordat je een vector kan gebruiken moet je eerst de library importeren: #include <vector>

Met de volgende code kun je een vector declareren: vector<int> voorbeeldVector; Dit is een vector met integers. Je kan natuurlijk ook een vector met strings of andere types declareren.

Een vector kan je vullen en printen op de volgende manier: voorbeeldVector.push_back(3); voorbeeldVector.push_back(2); voorbeeldVector.push_back(5); cout << voorbeeldVector[0] << endl; // 3 cout << voorbeeldVector[1] << endl; // 2 cout << voorbeeldVector[2] << endl; // 5

Of hetzelfde met een for-loop: for (int teller = 0; teller < voorbeeldVector.size();teller++) { cout << voorbeeldVector[teller] << endl; }

of

for (int waarde: voorbeeldVector) { cout << waarde << endl; }

In de vector library zitten nog handige functies. Voorbeelden van functies: - size() -> geeft de grootte van de vector aan. - front() -> geeft het eerste element in de vector. - back() -> geeft het laatste element in de vector. - popback() -> verwijdert het laatste element in de vector.

#include <iostream>
#include <vector>
using namespace std;

int main() {
 vector<int> v;
 v.push_back(5);
 v.push_back(2);
 v.push_back(6);  
 cout << v.back() << endl; // 2
 v.pop_back();
 cout << v.back() << endl; // 5
}

Opdracht 9.1 Schrijf een programma waarbij de volgende commando's kunnen worden uitgevoerd op een vector: * a x -> voeg een waarde x toe aan de vector. De waarde x is altijd van het type integer. * v -> verwijder het laatste element van de vector * d -> draai de inhoud van de vector om * p -> druk de inhoud van de vector af. Als er meerdere p's in de invoer staan dan wordt elke p op een aparte regel afgedrukt. Als er dus 3 keer een p in de invoer staat dan bestaat de uitvoer uit 3 regels. Als invoer krijg je op de eerste regel een getal N dat aangeeft hoeveel commando's worden ingevoerd. Op de tweede regel worden de N commando's gegeven. Voorbeeld invoer: 7 a 1 a 3 a 2 a 10 d v p De uitvoer wordt dan: 10 2 3 Met de volgende link kan je testen of je programma werkt: vectors inleveren. Vergeet niet je naam in commentaar bovenaan je code te zetten als je de code inlevert. // Deze code is geschreven door: <Naam> Opdracht 9.2 Schrijf een programma dat de som van getallen berekent. De gebruiker kan de getallen invoeren. Je weet van te voren niet hoeveel getallen de gebruiker gaat invoeren. Als de gebruiker een 0 intypt dan is de gebruiker klaar en wordt de som van de getallen afgedrukt.

Opdracht 9.3 Schrijf een programma dat de namen en leeftijden van een aantal personen kan opslaan. Sla de namen op in een vector. En sla de leeftijden op in een andere vector. Bereken de jongste persoon een geef als uitvoer de naam van deze persoon.

Een 2-dimensionale vector

Een 2-dimensionale vector declareer je als volgt: vector<vector<int>> vect; Het vullen en printen van een 2-dimensionale vectors kan op meerdere manieren.

Onderstaande code gebruik je als je vooraf de grootte van je vector weet:

#include <vector>
#include <iostream>
using namespace std;

#define aantalKol 3
#define aantalRij 5

int main() {
 //declareer de vector
 vector<vector<int> > vect(aantalRij, vector<int> (aantalKol));

 //vul de vector
 for (int rij = 0; rij < aantalRij; rij++) {
   for (int kol = 0; kol < aantalKol; kol++) {
      cout << "Geef element " << kol << " van rij " << rij << endl;
      cin >> vect[rij][kol];
   }  
 }

 //print de vector
 for (int rij = 0; rij < aantalRij; rij++) {
   for (int kol = 0; kol < aantalKol; kol++) {
      cout << vect[rij][kol];
   }  
   cout << endl;
 }  
}

Als je een 2-dimensionale vector direct met 0-en wil vullen dan gebruik je de code: vector<vector<int> > vect(aantalRij, vector<int> (aantalKol, 0));

Opdracht 9.4 Maak de opdracht: magische vierkanten

Onderstaande code gebruik je als je vooraf niet de grootte van de vector weet en het aantal kolommen en rijen door de gebruiker wordt bepaald. Het aantal kolommen per rij kan ook nog verschillen:

#include <vector>
#include <iostream>
using namespace std;

int main() {
  //declareer de vector
  vector<vector<int>> vect;

  //vul de vector
  int aantalRij, aantalKol, input;
  cout << "Hoeveel rijen heeft je vector?" << endl;
  cin >> aantalRij;
  for (int rij = 0; rij < aantalRij; rij++) {
    cout << "Hoeveel elementen heeft rij " << rij << "?" << endl;
    cin >> aantalKol;
    vector<int> vect2;
    cout << "Geef de " << aantalKol << " elementen: " << endl;
    for (int kol = 0; kol < aantalKol; kol++) {
      cin >> input;
      vect2.push_back(input);
    }  
    vect.push_back(vect2);
 }  

  //print de vector
  for (vector<int> rij_vect: vect){
    for (int waarde_vect: rij_vect) {
      cout << waarde_vect << " ";
    }
    cout << endl;
  }
}

Opdracht 9.5 Schrijf een programma dat de proefwerken kan opslaan voor verschillende vakken. Gebruik een 2-dimensionale vector om de cijfers op te slaan. Vraag om de invoer van het aantal vakken. Daarna kan de gebruiker de cijfers van de proefwerken voor deze vakken invoeren. Elk vak kan een verschillend aantal proefwerkcijfers hebben. De gebruiker kan invoeren hoeveel cijfers elk vak heeft. Bereken het gemiddelde cijfer van elk vak. Bereken ook het gemiddelde cijfer van alle proefwerken.

Last updated