Bevezetés a programozásba 2



Hasonló dokumentumok
STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

117. AA Megoldó Alfréd AA 117.

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Fejlett programozási nyelvek C++ Iterátorok

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Bevezetés a programozásba. 12. Előadás: 8 királynő

C++ Standard Template Library (STL)

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Challenge Accepted:C++ Standard Template Library

C++11 TÓTH BERTALAN C++ PROGRAMOZÁS STL KONTÉNEREKKEL

A C++ Standard Template Library rövid összefoglalás

Programozás C++ -ban 2007/4

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

Bevezetés a C++ programozásba

Körkörös listák. fej. utolsó. utolsó. fej

INFORMATIKAI ALAPISMERETEK

4. Öröklődés. Programozás II

C# osztályok. Krizsán Zoltán

XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std;

Programozás II gyakorlat. 8. Operátor túlterhelés

500. AA Megoldó Alfréd AA 500.

INFORMATIKAI ALAPISMERETEK

128. AA Megoldó Alfréd AA 128.

3. Gyakorlat Ismerkedés a Java nyelvvel

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

Osztály és objektum fogalma

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

.AA Megoldó Alfréd AA.

Programozás II gyakorlat. 4. Öröklődés

Collections. Összetett adatstruktúrák

Bánsághi Anna

Szövegek C++ -ban, a string osztály

Bánsághi Anna

500. CC Megoldó Alfréd CC 500.

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Maximum kiválasztás tömbben

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

Programozás II. 4. Dr. Iványi Péter

503.AA Megoldo Arisztid 503.A

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Adatbázisok* tulajdonságai

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Rekurzió. Horváth Gyula.

Generikus Típusok, Kollekciók

A C++11 újdonságai. Smidla József Operációkutatási Laboratórium október 9.

500.AA Megoldo Arisztid 500.A

Programozás II. 2. Dr. Iványi Péter

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

500. DD Megoldó Alfréd DD 500.

500.AA Megoldó Kulcsár 500.A

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Programozási technológia

Objektumorientált programozás C# nyelven

.Net adatstruktúrák. Készítette: Major Péter

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Felhasználó által definiált adattípus

C# feladatok gyűjteménye

Géptermi zh-írás forgatókönyve

Programozás C++ -ban

Információs Technológia

Bevezetés a C++ programozási nyelvbe

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok

Széchenyi István Szakképző Iskola

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Generikus osztályok, gyűjtemények és algoritmusok

Fejlett programozási nyelvek C++

228. AA Default Konstruktor AA 228.

Mit ír ki? feladatok megoldásokkal

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

111. AA Megoldó Alfréd AA 111.

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

C++ Gyakorlat jegyzet 10. óra

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

Bevezetés a programozásba előadás: Öröklődés

Access adatbázis elérése OLE DB-n keresztül

C++ Gyakorlat jegyzet 10. óra.

Programozás II. ATM példa Dr. Iványi Péter

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Bevezetés a programozásba. 9. Előadás: Rekordok

Adatbázis-kezelés. Harmadik előadás

Programozás. C++ típusok, operátorok. Fodor Attila

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Algoritmizálás + kódolás C++ nyelven és Pascalban

Alkalmazott modul: Programozás

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

500.AJ Megoldó Magyar Magdolna 500.J

Smalltalk 2. Készítette: Szabó Éva

Átírás:

Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/

Vector int int main() { vector<int> v(10); int int sum=0; for for (int i=0;i<v.size();i++) { sum+=v[i]; cout osszeg: sum sum endl;

Általános konténer Elemeket tartalmaz A konténer deklarációjánál az elemek típusa megadható template Most használni tanuljuk meg a konténereket Írni majd adatszerkezetek tárgyból lesz feladat

STL Standard Template Library A C++ szabvány része Típussal paraméterezhető konténereket és algoritmusokat tartalmaz A legtöbb modern programozási nyelvben létezik megfelelője

Vector template<typename _Tp, > class vector { ; ; int int size() const { _Tp& operator[](int n) { Közelítő leírás, hogy kiférjen. A pontos definíciót megtalálod a fordítóprogramod könyvtáraiban, ami tartalmaz még néhány olyan technikát, amit még nem tanultunk

Konténerek műveletei Következő elem olvasása, írása Tetszőleges elem olvasása, írása Méret, üres-e Elem hozzáadása elejére, végére, bárhova Elem törlése elejéről, végéről, bárhonnan

Konténerek műveletei Következő elem olvasása, írása Tetszőleges elem olvasása, írása Méret, üres-e Elem hozzáadása elejére, végére, bárhova Elem törlése v.size() elejéről, végéről, bárhonnan, mindet v[ i ] v.empty() v.push_back(e) v.pop_back(e)

vector hatékonysága Következő elem olvasása, írása Tetszőleges elem olvasása, írása Méret, üres-e Elem hozzáadása elejére, végére, bárhova Elem törlése v.size() elejéről, végéről, bárhonnan, mindet v[ i ] v.empty() v.push_back(e) v.pop_back(e) jelmagyarázat: konstans logaritmikus lineáris nincs

Hatékonysági kategóriák Konstans: fordítási időben ismert fix számú lépés Függő kategóriák: valamilyen n paramétertől függ a lépésszám, tipikusan elemszámtól, az alábbi képletekkel legfeljebb konstansszorosan becsülhető logaritmikus: log n lépés lineáris: n lépés négyzetes, polinomiális: n 2, n p lépés exponenciális: 2 n lépés

Példa: beszúrás vektorba Másolások

Vektor A tetszőleges helyre beszúrás lineáris idejű, amilyen hosszú a vektor, annyi ideig tart A végére beszúrás átlagosan logaritmikus idejű Mivel mindig kétszerezi a kapacitást, n beszúrás log2 n átméretezést jelent, nincs szükség másolásra Lekérdezés, elem olvasása egy lépéses művelet

Az STL konténerei Szekvenciális konténerek vector list Asszociatív konténerek map set Adapterek queue stack

A list Minden eleme tudja, ki a következő Az n-edik elem megkeresése tehát lassú, n lépést igényel Beszúrás, törlés viszont bárhol egy lépéses művelet Iterátorokkal kell kezelni: list<int> l; for (list<int>::iterator it=l.begin();it!=l.end();++it){ cout *it;

Lista implementáció A (láncolt) listák lényege, hogy minden elem tartalmaz egy mutatót a következő elemre struct elem { T adat; elem * kov; ; Az utolsó elem általában nullmutatót tartalmaz, vagy körbeláncol az első elemre. Beszúrás, törlés: néhány mutatót kell módosítani

Iterátorok Konténerek közös szintaxisú bejáró típusa list<int> l; for (list<int>::iterator it=l.begin();it!=l.end();++it){ cout *it; vector<int> v; for (vector<int>::iterator it=v.begin();it!=v.end();++it){ cout *it;

Konténerek Szekvenciális Értelmezhető az elem indexe, sorszáma Fontos lehet a sorrend az elemek között Asszociatív set: nincs rendezettség, csak az a fontos, hogy egy elem létezik-e, vagy sem map: kulcs-érték párok, az értéket nem index, hanem kulcs alapján keressük

Asszociatív konténerek: map int int main() { map map <string, int> honapokhossza; honapokhossza[ január ]=31; honapokhossza[ december ]=31; string s; s; cin cin >> >> s; s; map<string,int>::iterator it; it; it it = honapokhossza.find(s); if if (it!=honapokhossza.end()) { cout honapokhossza.at(s); else { cout nincs ilyen hónap ;

Asszociatív konténerek Elem/kulcs létezésének eldöntése logaritmikus sebességgel történik Elem hozzáadása és törlése is logaritmikus idejű Nincs kitüntetett sorrend, bár végigjárható minden elem, a sorrend nem mindig definiált Nagyon rugalmas eszköz, apró veszélyekkel honapokhossza[ blabla ] lekérés mellékhatása egy beszúrás definiálatlan elemre, blabla kulccsal, fontos a find() és at() használata

Asszociatív konténerek A kulcs típusa bármi lehet, amire létezik operator< művelet Ennek hátterében egy rendezőfa nevű szerkezet van 3 1 6 4 7

Konténerekhez illő tipikus feladatok vector: fix, indexelt adatok, tetszőleges hozzáférés, pl.: logaritmikus keresés list: nagyon változó számú, fontos sorrendbeli adatok, főleg helyi műveletekkel, pl.: szövegszerkesztőben a szöveg sorai set: elemek beszúrására, törlésére, létezésének eldöntésére van szükség, pl.: egy fájl azon szavai, amik többször is előfordulnak map: kulcshoz rendelhető értékek halmaza, pl.:angol-magyar szótár map<string,string>

Adatszerkezetek A konténerek megvalósításának tudománya az adatszerkezetek és algoritmusok Mi csak használjuk ezeket, ehhez viszont érdemes tudni, hogy melyik miben jó, amihez segít tudni, hogyan működik A konténerek kombinálhatóak, a kombinációk hatékonyságának végiggondolásához is szükség van erre az ismeretre vector<list<int> > listakvektora;

Hatékonyság táblázat vector list map elem elérés 1 n log n beszúrás n 1 log n törlés n 1 log n

Konténerek használata A feladat specifikációjából megsejthető, mely műveletek milyen gyakoriságúak, ez kellőképpen meghatározza a hatékony választások körét Itt is igaz a keep it simple szabály: ha valamit egyszerűen is elég jól meg lehet csinálni, érdemes úgy csinálni legfeljebb kiderül, hogy nem elég gyors, akkor átalakítjuk, de addig is működik A konténerek a tagfüggvényeiken keresztül kezelhetőek, van dokumentáció

STL algoritmusok Az STL konténerek egy része feltételezi, hogy létezik néhány függvény a paraméterül adott típusokra például a map a kulcsoknál az operator<() Ennek segítségével megoldhatóak bonyolultabb algoritmusok, a konténer fajtájának rögzítése nélkül

sort #include #include <algorithm> <algorithm> int int main() main() { { vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for for (vector<int>::iterator (vector<int>::iterator it=v.begin(); it=v.begin(); it!=v.end();it++) it!=v.end();it++) { { cout cout *it *it " " "; "; cout cout endl; endl; sort(v.begin(),v.end()); sort(v.begin(),v.end()); for for (vector<int>::iterator (vector<int>::iterator it=v.begin(); it=v.begin(); it!=v.end();it++) it!=v.end();it++) { { cout cout *it *it " " "; ";

Template osztály szintaxis template <typename T> T> class TC TC { T mező; T fv(t a); ; ;... TC<int> tci; Az eddigiekkel ellentétben ez a T tényleg így van a kódban

Template példa template <typename T> T> class Tomb { T *_m; int int _s; _s; public: Tomb(int s) s) : _s(s) { _m=new T[_s]; ~Tomb() {delete[] _m; T operator[](int i) i) const {return _m[i]; ; ;...... Tomb<int> t(10); int int k = t[1]; Tomb<string> t2(10); string s = t2[1];

A template működése Szöveg szintű helyettesítés A szintaktikai hibák előre kiszűrhetőek, a szemantikaiak nem Az implementációt nem lehet elrejteni, mert ha el van rejtve, akkor a helyettesítést nem lehet elvégezni Ezért előre lefordítani sem lehet. A fordítás előtti helyettesítés csak akkor történik meg, ha meghivatkozzuk az adott template-t illetve annak adott metódusát.

Fontos: Minden template implementációját a fejlécfájlba kell tenni. Nem lehet elrejteni. (elméletileg az export kulcsszó segítségével meg lehet tenni. Az elmélet és a gyakorlat között elméletileg nincs különbség..)

Template osztály szintaxis template <typename T> T> class TC TC {... void fv(t t) t) { T x=t%10;... ; ; TC<int> tci; tci.fv(); TC<string> tci; tci.fv(); Ha olyan műveletet használunk, ami a paraméter T típusnak nincs, hibát kapunk. Ezzel meg lehet szorítani a paramétereket OK HIBA

template függvény template <typename T> T> T maxt(const T& T& a, a, const T& T& b) b) { return a > b? a : b; b;...... char k = maxt('a','b'); int int i = maxt(3,4);

template függvény template <typename T> T> T maxt(const T& T& a, a, const T& T& b) b) { return a > b? a : b; b;...... char k = maxt('a','b'); int int i = maxt(3,4);

Tervezés template osztályokkal Mit érdemes típussal paraméterezni? Aminek a kódja nagyon hasonló sokféle típusra Konténer osztályok: vector (, list, map, stb...) Algoritmusok (#include <algorithm>) Amiben az egyes műveletek túlterhelése jelent csak különbséget template <typename T> T max(t a, T b) { return a>b? a:b; Mire alkalmas még? Nehezen végiggondolható lehetőségek: template metaprogramming

map példa int int main() main() { map<string, int> int> m; m; m["aa"]=1; m["bb"]=2; m["cc"]=3; for for (map<string, int>::iterator it=m.begin() ;it!=m.end();it++) { cout cout it->first " " it->second endl; endl;

map kulcs típushoz kell operator< struct struct A { A(int A(int n):a(n){ int int a; a; ; ; bool bool operator<(a a, a, A b) b) { return return a.a<b.a; a.a<b.a; int int main() main() { map<a, map<a, int> int> m; m; m[a(1)]=4; m[a(2)]=3; m[a(3)]=2; m[a(4)]=1; for for (map<a,int>::iterator (map<a,int>::iterator it=m.begin(); it=m.begin(); it!=m.end(); it!=m.end(); it++) it++) { cout cout it->first.a " " it->second endl; endl;

STL algoritmusok Az STL konténerek egy része feltételezi, hogy létezik néhány függvény a paraméterül adott típusokra például a map a kulcsoknál az operator<() Ennek segítségével megoldhatóak bonyolultabb algoritmusok, a konténer fajtájának rögzítése nélkül

sort #include #include <algorithm> <algorithm> int int main() main() { { vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for for (vector<int>::iterator (vector<int>::iterator it=v.begin(); it=v.begin(); it!=v.end();it++) it!=v.end();it++) { { cout cout *it *it " " "; "; cout cout endl; endl; sort(v.begin(),v.end()); sort(v.begin(),v.end()); for for (vector<int>::iterator (vector<int>::iterator it=v.begin(); it=v.begin(); it!=v.end();it++) it!=v.end();it++) { { cout cout *it *it " " "; ";

sort struct struct A A { { A(int A(int n):a(n){ n):a(n){ int int a; a; ; ; bool bool operator<(a operator<(a a, a, A A b) b) { { return return a.a<b.a; a.a<b.a; int int main() main() { { vector<a> vector<a> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(a(rand()%100)); v.push_back(a(rand()%100)); for for (vector<a>::iterator (vector<a>::iterator it=v.begin(); it=v.begin(); it!=v.end();it++) it!=v.end();it++) { { cout cout it->a it->a " " "; "; cout cout endl; endl; sort(v.begin(),v.end()); sort(v.begin(),v.end()); for for (vector<a>::iterator (vector<a>::iterator it=v.begin(); it=v.begin(); it!=v.end();it++) it!=v.end();it++) { { cout cout it->a it->a " " "; ";

Algoritmusok Bejáró, nem módosító algoritmusok for_each, find, count, search, Rendezések sort, stable_sort, merge, Sorozatmódosítások swap, fill, copy, replace, random_shuffle, Speciális binary_search, sort_heap, next_permutation,

for_each int int main() main() { vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for_each for_each (v.begin(), (v.begin(), v.end(), v.end(), mit_kell_csinalni); mit_kell_csinalni);

for_each void void mit_kell_csinalni(int mit_kell_csinalni(int a) a) { cout cout a " "; "; int int main() main() { vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for_each for_each (v.begin(), (v.begin(), v.end(), v.end(), mit_kell_csinalni); mit_kell_csinalni);

for_each A harmadik paraméter egy függvény A template technika következménye, hogy bármi jó, ami mögé zárójelbe téve ott van a paraméter Tehát a függvény neve a paraméter Ez nem függvénymutató, a függvénymutató egy bizonyos típus egy adott szignatúrához.

Függvénymutató vs template függvény paraméter Ez nem függvénymutató, hanem template paraméter, a függvénymutató egy bizonyos típus egy adott szignatúrához. template <typename Fun> void fv(fun f){ f(); void fv(void (*f)()) { f();

for_each és a funktor Funktor: olyan osztály vagy objektum, aminek meg van valósítva az operator() ( ) operátora Tehát az objektum neve után zárójelet írva ez az operátor hívódik meg Ezzel okos függvényeket lehet csinálni, amik mezőket tartalmazhatnak konstruktorparamétert vehetnek át

for_each struct struct Mit_kell_csinalni Mit_kell_csinalni { void void operator()(int operator()(int a) a) { cout cout a " "; "; ; ; int int main() main() { Mit_kell_csinalni Mit_kell_csinalni mit_kell_csinalni; mit_kell_csinalni; vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for_each for_each (v.begin(), (v.begin(), v.end(), v.end(), mit_kell_csinalni); mit_kell_csinalni);

for_each struct struct Mit_kell_csinalni Mit_kell_csinalni { Mit_kell_csinalni() Mit_kell_csinalni() {index=0; {index=0; void void operator()(int operator()(int a) a) { cout cout index index ":" ":" a " "; "; index++; index++; int int index; index; ; ; int int main() main() { Mit_kell_csinalni Mit_kell_csinalni mit_kell_csinalni; mit_kell_csinalni; vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for_each for_each (v.begin(), (v.begin(), v.end(), v.end(), mit_kell_csinalni); mit_kell_csinalni);

for_each struct struct Mit_kell_csinalni Mit_kell_csinalni { Mit_kell_csinalni(int Mit_kell_csinalni(int kezdo) kezdo) {index=kezdo; {index=kezdo; void void operator()(int operator()(int a) a) { cout cout index index ":" ":" a " "; "; index++; index++; int int index; index; ; ; int int main() main() { Mit_kell_csinalni Mit_kell_csinalni mit_kell_csinalni(5); mit_kell_csinalni(5); vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for_each for_each (v.begin(), (v.begin(), v.end(), v.end(), mit_kell_csinalni); mit_kell_csinalni);

for_each struct struct Mit_kell_csinalni Mit_kell_csinalni { Mit_kell_csinalni(int Mit_kell_csinalni(int kezdo) kezdo) {index=kezdo; {index=kezdo; void void operator()(int operator()(int a) a) { cout cout index index ":" ":" a " "; "; index++; index++; int int index; index; ; ; int int main() main() { vector<int> vector<int> v; v; for for (int (int i=0;i<20;i++) i=0;i<20;i++) v.push_back(rand()%100); v.push_back(rand()%100); for_each for_each (v.begin(), (v.begin(), v.end(), v.end(), Mit_kell_csinalni(5)); Mit_kell_csinalni(5));

for_each Mi a jó benne? független a konténertől biztosan működik, nem hagy ki vagy jár be kétszer elemeket saját megoldásoknál ez a veszély fennáll Mi a hátrány? Kell egy külső függvény, vagy funktor A következő C++ szabványban már megoldható lesz a dolog külső függvény nélkül is Tehát kicsit többet kell gépelni

kitérő: C++11 lambda függvények: for_each(v.begin(), v.end(), [&sum](int elem){ sum+=elem; ); auto kulcsszó új jelentése for(auto it=l.begin();it!=l.end();it++) { g++ -std=c++11 (4.5-)

STL algoritmusok A sort és a for_each példáján keresztül minden STL algoritmus használata elsajátítható Közös jellemzők: nem változtatják meg a konténer szerkezetét a változtatások mindig értékek szintjén történnek elemszámuk sem változhat iterátorokon keresztül lehet elérni a konténereket

Extra iterátorok #include #include <iterator> int int main() main() { vector<int> v; v; for for (int (int i=0;i<20;i++) v.push_back(rand()%100); copy copy ( v.begin(), v.end(), v.end(), ostream_iterator<int>(cout,", ") ") ); );

Extra iterátorok int int main() main() { vector<string> v; v; ifstream ifstream f("main.cpp"); copy(istream_iterator<string>(f), istream_iterator<string>(), back_insert_iterator<vector<string> >(v)); >(v)); copy(v.begin(), v.end(), v.end(), ostream_iterator<string>(cout,", ") ") ); );