En ström är en klass som representerar en bytesekvens med data. I C++ finns flera typer av strömmar, men de går alla al använda på samma säl.

Relevanta dokument
Innehåll. Relationer mellan klasser Operatoröverlagring. Static-medlemmar. Const- och referensmedlemmar. Const medlemsfunktioner

Innehåll. Rela+oner mellan klasser Operatoröverlagring. Sta+c- medlemmar. Const- och referensmedlemmar. Const medlemsfunk+oner. friend

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Föreläsning 4: Filer och strömmar

Filhantering. Grunderna i filhantering. Uppbyggnad av filer. Data hierarkin. Filpekaren. Positionering i filer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

4. Standard-containers. Strömmar och filer

Del6 Strömmar Ämnesområden denna föreläsning:

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i. Programmering i språket C

6 In- och utmatning, strömmar

Kapitel 5. Strömmar. Utmatning

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Innehåll. 1 Algoritmer. 2 Strömmar och filer. 3 Iteratorer. 1 Söka, räkna. 2 Jämföra, genomlöpa. 3 Generera nya data. 4 Kopiera och flytta element

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

TDIU01 - Programmering i C++, grundkurs

Strömmar och strängar

TDIU01 - Datortenta (DAT2)

Intro till standardbiblioteket. Eric Elfving

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Tentamen i Programmering grundkurs och Programmering C

2D1387, Programsystemkonstruktion med C++ 01/02 1

Strängar. Strängar (forts.)

C++ Lektion Filhantering

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...

Tentamen EDAF30 Programmering i C++

TDIU01 - Programmering i C++, grundkurs

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Imperativ programmering (Fö 1 2) C++ Ett första programexempel. Enkel in- och utmatning strömbiblioteket

Innehåll. Pekare. Datatyper Pekare, Arrayer och Referenser. Pekare Syntax. Pekare Syntax, operatorer. 4. Standard-containers. Pekare och arrayer

Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

TDIU01 - Programmering i C++, grundkurs

TDDB28 OH Föreläsning: C++ 1

TDDI14 Objektorienterad programmering

TDIU01 - Programmering i C++, grundkurs

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

TDIU01 - Datortenta (DAT2)

C++ - En introduktion

Innehåll. Klasserna vector och deque

Standard Template Library STL. Behållarklasser

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Föreläsning 13. In- och utmatning

TDDC76 PoD OH Föreläsning C++ 1 C++

7 Templates och Exceptions

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

Funktionens deklaration

Introduktionslaboration

Programmeringsteknik med C och Matlab

Det finns många flaggor till g++,

Algoritmbiblioteket (STL) Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer.

Deklarera en struct som kan användas för att representera en rät linje

Skizz till en enkel databas

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen EDAF30 Programmering i C++

Innehåll. Pekare Exempel

Övning från förra gången: readword

TDIU06 Programmering g.k. Laborationer LAB2. Vt1, Dessa laborationer ingår i examinationsmomentet LAB2 och ska göras i läsperiod Vt1.

Introduktionslaboration

Tentamen *:85/2I4123 C

Övningar Dag 2 En första klass

Innehåll. Pekare Exempel

TDDC76 - Programmering och Datastrukturer

Tentamen Objektorienterad Programutveckling med C++

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Enkla datatyper minne

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)

C++ - En introduktion

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Föreläsning 1: Momstabellen i C++

C++ Slumptalsfunktioner + switch-satsen

Användning av typeid. Operatorerna typeid och. Filen typeinfo.h måste inkluderas. typeid

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Uttryck, satser och strömhantering

TDDC76 - Programmering och Datastrukturer

Tentamen EDAF30 Programmering i C++

TDDC76 - Programmering och Datastrukturer

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005

Tentamen EDAF30 Programmering i C++

Arrayer. results

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng

Sammansatta datatyper Generics: Parametrisk polymorfism

Transkript:

Innehåll Strömmar istream, ostream Strömbegreppet Tillgängliga strömtyper Filströmmar Strängströmmar Felhantering Exempel Begrepp En bytesekvens är en rad bytes som har en viss ordning som inte kan ändras. Kan läsas i den ordning de dyker upp Får den ordning i vilken de skrivs En ström är en klass som representerar en bytesekvens med data. I C++ finns flera typer av strömmar, men de går alla al använda på samma säl. Inström (istream) En inström är en klass som representerar en sekvens av byte som kommer in Oll programmet. Det går bara al läsa en byte i taget i den ordning de kommer. Det går inte al läsa en byte flera gånger. Det går inte al backa eller hoppa framåt. Tangentbordet är el typiskt exempel på något som ger upphov Oll en inkommande bytesekvens. Utström (ostream) En bytesekvens är en rad bytes som har en viss ordning som inte kan En utström är en klass som representerar en sekvens med byte som strömmar ut från programmet. Det går bara al skriva en byte i taget. Ordningen avgörs av den ordning byte skrivs. Det går inte al ångra byte som redan skrivits Oll strömmen. Skärmen är en typisk desonaoon för en utgående bytesekvens. C++ datakällor Källa Klasstyp (objekt) Inkludering Tangentbord istream (cin) <iostream> Datafil ifstream <fstream> Strängvariabel istringstream <sstream> 1

C++ datamål Mål Klasstyp (objekt) Inkludering Skärm ostream (cout, cerr) <iostream> Datafil ofstream <fstream> Strängvariabel ostringstream <sstream> Filer Måste öppnas innan användning Öppning innebär al filen lokaliseras på disk och det är inte speciellt effekovt al göra dela vid varje användning, alltså krävs al filen öppnas först I C++ kan en fil öppnas automaoskt när el filobjekt instansieras (konstruktor) Måste stängas e[er användning Öppning innebär al informaoon - som behövs för snabb direkt åtkomst Oll filens data - lagras i operaovsystemet. Denna informaoon måste tas bort när den inte längre behövs för al programmet inte skall använda onödigt minne. Alltså krävs al filer stängs. I C++ stängs filen automaoskt när programmet lämnar el filobjekts deklaraoonsblock (destruktor) Filöppning och filstängning Filöppningsmode #include <fstream> ifstream indata( filnamn ); ofstream utdata( filnamn ); fstream iodata; iodata.open( fil, ios::in ios::out); indata.close(); utdata.close(); iodata.close(); Mode Vad? Relevans ios::binary Tolka inte som text (ändra inget) in och ut ios::in Använd som källa in ios::ate Börja sist i filen ut (och in) ios::out Använd som mål, skapa ut ios::app Skriv allod sist i filen, skapa ut ios::trunc Töm filen ut Kan kombineras: ios::out ios::app ios::binary FilposiOonering RelaOv filposioon fstream fs( data.txt ); fs.tellg(); // var läsning sker (get) fs.tellp(); // var skrivning är (put) fs.seekg(10); // gå till 10 fs.seekg(-3, ios::cur); // gå till 7 fs.seekg(0, ios::end); // gå till slut Flagga ios::beg ios::cur ios::end Betydelse RelaOvt början RelaOvt nuvarande posioon RelaOvt slutet fs.seekp(-5, ios::end); 2

(Binärfiler) Formaterad inmatning/utmatning konverterar allod från/oll textsträngar Ibland vill man dumpa data precis som det är lagrat i minnet, utan konvertering För al skriva byte Oll fil utan konvertering: istream& read ( char* s, streamsize n ); ostream& write ( const char* s, streamsize n ); Varning för olika endianess Intel: LiLle endian (lägst adress, lägst signifikans) Sparc: Big endian (lägst adress, högst signifikans) #include <sstream> int i, j, k; string heltal = 11 12 13 ; Strängströmmar istringstream iss; // eller iss(heltal); iss.str(heltal); // på en rad... iss >> i >> j >> k; ostringstream oss; oss << i << j << k << endl; heltal = oss.str(); cout << heltal; Gemensam funoonalitet Inströmmar Formaterad inmatning med >> Oformaterat inmatning (se Odigare Fö) Utströmmar Formaterat utmatning med << Felhantering fail, eof, bad, good, clear Felhantering Programmerarens ansvar kontrollera om en läsning gick bra och al göra något åt eventuella fel. Strömmen är helt blind, den kan inte ens känna framför sig Strömmen kommer allod ihåg alla fel Strömmen törs inte gå framåt så länge den minns något fel MedlemsfunkBon fail() eof() bad() good() clear() Användning/Betydelse Om konvertering misslyckats Om strömmen slagit huvudet i filsutet Om strömmen blivit oanvändbar Om strömmen är redo (inga fel) Glöm Odigare fel Exempel Fö 5 / Fö 6 Rita, dikutera! Enkel inläsning av tal Oll Ctrl- D (filslut) Läs in el tal i [1, 7] med full felhantering Konvertera mellan tal och strängar Kopiera en fil Oll en annan Varning för felakogt slutvillkor Summera talen på varje rad i en fil Strömmar som parameter och returvärde ALLTID referens! Alla strömtyper ÄR istream& eller ostream& (och mer...) Kedjing av strömoperaooner 3

Innehåll Standard Template Library Behållare Iteratorer Anpassade iteratorer Algoritmer FunkOoner som argument Exempel C- bibliotek std::string, std::random, boost::regex (std::regex) Standard Template Library EL antal databehållare mel olika styrkor och svagheter EL generiskt säl al iterera över alla element i en databehållare EL antal algoritmer för al behandla data i behållarna på olika säl En filosofi: endast rimligt effekova operaooner skall finnas Ollgängliga för varje behållare Allt är templates fungerar på valfri datatyp! string vector list set map pair tuple array (Det finns många fler!) Några behållare Iteratorer Används för al stega igenom en behållare begin(), cbegin(), rbegin(), crbegin() end(), cend(), rend(), crend() operator*() // avreferering ( gå Oll adress ) operator- >() operator!=() // används isr operator<() Rita, förklara! Vanlig indexering vector<int> data;... for (int i = 0; i < data.size(); ++i) { } cout << data[i] << endl; cout << data.at(i) << endl; Stegning med iterator vector<int> data;... vector<int>::const_iterator i; for (i = data.begin(); i!= data.end(); ++i) { cout << *i << endl; } 4

C++11 anpassning av for- loop vector<int> data;... for ( int& value : data ) { cout << value << endl; } Förenklad deklaraoon map<int, string> my_map; // du kan skriv iteratortypen själv // rekommenderas för nybörjare!! map<int, string>::const_iterator i = my_map.begin(); // kompilatorn kan skriva typen åt dig // det gäller då att du vet vad du får!! auto i = my_map.cbegin(); // båda sätten ger samma resultat! // auto bestäms alltid vid kompileringen! Speciella iteratorer back_inserter(behållare) front_inserter(behållare) istream_iterator<typ>(ström) istream_iterator<typ>() // end() ostream_iterator<typ>(ström, SEPARATOR) ostream_iterator<typ>() // end() Några algoritmer for_each(first, last, func) find(first, last, value) count(first, last, value) copy(first, last, first_out) unique(first, last, [predicate]) remove(fist, last, value) replace(first, last, value, new_value) stable_sort(first, last, [compare]) binary_serch(first, last, value, [compare]) max_element(first, last, [compare]) merge(first1, last1, first2, last2, first_out, [compare]) And many more... you NEED a reference manual! C++11: hlp://www.cplusplus.com/reference/ Older: hlp://www.medini.org/stl/ FunkOoner som argument Några algoritmer behöver veta vad som skall uröras på varje element, eller hur två element skall jämföras. DeLa går lösa på flera säl: Skriv en funkoon och skicka namnet på funkoonen (utan anropsparenteser) som argument. Skriv en klass och implementera operator() som gör al instanser kan anropas som en funkoon. Skicka en instansvariabel som argument. Skicka en lambdafunkoon som argument. Rita! Förklara! Exempel Läs in tal Oll std::list, sortera, ta bort dubleler, skriv ut. Sortera en std::vector med <förnamn, e[ernamn> eller tvärtom. Skapa en frekvenstabell över bokstäver i fil med hjälp av en std::map. 5

Använda C- funkooner C- biblioteket har många delar som forrarande är användbart i C++. En given inkluderingsfil <header.h> inkluderas i C++ genom al skriva <cheader> istället: <cstdlib> isr <stdlib.h> <cctype> isr <ctype.h> <cmath> isr <math.h> <come> isr <Ome.h> <cstdlib> struct div_t { int quot; int rem; }; struct div(int numer, int denom); int abs(int value); int rand(); void srand(unsigned int seed); void exit(int status); <cctype> <cmath> int tolower(int) int toupper(int) int isalpha(int) int isalnum(int) int isblank(int) int iscntrl(int) int isdigit(int) int isgraph(int) int islower(int) int isprint(int) int ispunct(int) int isspace(int) int isupper(int) int isxdigit(int) #define M_PI 3.1415... double sin(double) double cos(double) double pow(double) double sqrt(double) double exp(double) double floor(double) double ceil(double) double floor(double) double round(double) <come> // Sek. sedan kl 00:00 1970-01-01 time_t time(nullptr) chrono: Tid i C++11 raoo: Bråk i C++11 <chrono>, <raoo> // Ticks sedan programstart clock_t clock() #define CLOCKS_PER_SEC... 6

size_t size_t string& string& char char* char string& string string <string> size() length() insert(index, tecken/sträng) erase(index, [antal]) at(index) c_str() operator[index] operator+=(tecken/sträng) operator+(tecken/sträng) substr(index, antal) <random> Skapa motor: default_random_engine(seed) mt19937(seed) random_device Skapa distribuoon: uniform_int_distribution(start, stop) normal_distribution(mean, stddev) srand(), rand() i C-biblioteket <boost/regex.hpp> sudo apt- get install libboost- all- dev boost::regex(palern) boost::regex_match(subject, palern) boost::regex_search(subject, result, palern) boost::regex_replace(subject, palern, replace) 7