2 Vectorer & Listor

Vectorer och Listor är två olika förprogrammerade klasser som kan hämtas som ett bibliotek. Det som båda gör är att de kan lagra andra variabel typer i olika fack, dessa fack kan sen sorteras och till och med bli flera vilket är den största anledning att använda dom, för att man kan enkelt ökafå fler variabler efter behov och på så sätt spara på minnesutrymme.

För att beskriva vad de olika klasserna gör olika tar jag hjälp av en bild:


En lista består av två bitar, en variabel del och en pointer del som pekar på nästa variabels plats i minnet, till skilnad från vectorn där allt ligger i en följd. En pointer är en sorts variabel som endast kan lagra på vilken plats en annan variabel ligger. Det dom olika gör är att Listor blir mer effektiva om man väldigt ofta ska lägga till eller ta bort information då man endast pekar om pointern till någon annan variabel, och Vectorer går det snabbare att söka i eftersom allt ligger i en följd.

Iteratorn

En iterator är en typ av variabel som endast kan lagra minnescells platser, dvs destinationen till en variabel. När man ska ge en iterator platsen för första variablen i listan eller vectorn så skriver man iteratornsnamn=listan/vectornsnamn.begin();

Vector

Funktioner

#include <vector> - Includerar vector klassen
vector<variabeltyp> namn - Skapar en vector
namn.push_back(varde) - Lägger till variablen varde sist i vectorn
namn.at(position) - gör att man kan hämta eller ändra värdet
namn.assign(antal, varde) - fyller eller bytar ut antal stycken platser från plats 0 med varde

vector<variabeltyp>::iterator it - Skapar en iterator som tar reda på vilken minnescell ett värde ligger i
namn.insert(it, varde) - Infogar varde på platsen it
namn.erase(it) - Tar bort värdet på platsen it
namn.erase(start, stop) - Tar bort alla variablar från start till platsen innan stop

namn.begin() - Ger platsen för första minnescellen i vectorn
namn.end() - Ger sista
namn.clear() - Tömmer vectorn så den blir 0 stor
namn.size() - Returnerar vectorns storlek
namn.empty() - Kollar om vectorn är tom, returnerar true om den är tom, annars false

Det går bra att jämföra olika vektorer med == och !=, även <, >, <=, >= går bra.

Det går bra att använda struct till vectorer, men kom ihåg att när man använder en struct som variabel typ så måste man push_back en struct av samma typ sen också.

Exempel

  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int main()
  5. {
  6. vector<string> tal;
  7. string temp;
  8. for(int i=0; i<5; i++){
  9. cin>>temp;
  10. tal.push_back(temp);
  11. }
  12. system("cls");
  13. for(int i=0; i<5; i++)
  14. cout<<"tal "<<i<<':'<<tal.at(i)<<endl;
  15. return 0;
  16. }


List

Listor har inte .at funktionen vilket gör den lite jobbigare att handskas med. Så jag brukar inte använda listor om jag inte måste.

Funktioner

#include <list> - Includerar list klassen
List<veriabeltyp> namn - Skapar en lista
namn.push_back(variabel) - Lägger till variablen sist i listan
namn.push_front(variabel) - Lägger till variablen först i listan

list<variabeltyp>::iterator it - skapar en iterator variabel
namn.insert(it, variabel) - Lägger till variablen på platsen it
namn.erase(it) - Tar bort variablen på platsen it
namn.erase(start, stop) - Tar bort alla variablar från start till platsen innan stop

namn.size() - Returnerar storleken av listan
namn.clear() - Tömmer listan så den blir 0 stor
namn.empty() - Kollar om listan är tom, returnerar true om den är tom, annars false
namn.sort() - sorterar listan i stigande ordning
namn.reverse() - vänder ordningen på listan

Det går bra att jämföra olika listor med == och !=, även <, >, <=, >= går bra.

Info

För att komma år ett värde i en lista så måste man, eftersom inte .at() finns, använda iteratorer. Men det blir jobbigare än så, för i lista biblioteket så funkar det inte att plussa med så många platser iteratorn ska hoppa utan det funkar bara med it++. Detta gör att om du vill komma åt det femte värdet måste du skriva:
  1. for(int i=0; i<5; i++)
  2. it++;
  3. cout<<(*it);

Du måste skriva (*it) om du ska kunna skriva ut eller använda ett värde i en lista.

Det går bra att använda struct till list, men tyvär fungerar inte kommandot lista.sort() när man använder struct, för att sortera måste man använda två olika iterator variabler. Om man ska använda listor med struct så för att komma år de olika variablerna skriver man (*it).variabel. Och kom ihåg att när man använder en struct som variabel typ så måste man push_back/push_front en struct av samma typ sen också.

Exempel

  1. #include <iostream>
  2. #include <list>
  3. int main()
  4. {
  5. list<string> tal;
  6. string temp;
  7. for(int i=0; i<5; i++){
  8. cin>>temp;
  9. tal.push_back(temp);
  10. }
  11. system("cls");
  12. list<string>::iterator it=tal.begin();
  13. for(int i=0; i<5; i++){
  14. cout<<"tal "<<i<<':'<<(*it)<<endl;
  15. it++;
  16. }
  17. return 0;
  18. }

Källa: http://blinkenlights.se/