Professional Documents
Culture Documents
C++ - STL
C++ - STL
Khi nim
STL l th vin chun ca C++, c xy dng sn Ci t cc cu trc d liu v thut ton thng dng Bao gm cc lp v hm khun mu, cho php lm vic vi d liu tng qut Nm trong mt namespace c tn std Cc phn chnh:
Cc lp d liu c bn: string, complex Xut nhp (IO) Cc lp cha (containers): list, vector, deque, stack, map, set, Duyt phn t ca cc lp cha (iterators) Mt s thut ton thng dng: tm kim, so snh, sp xp, Qun l b nh, con tr X l ngoi l (exception handling)
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
X l chui
#include <string>
Lp string cho chui ASCII v wstring cho Unicode Cc thao tc c bn: +, += (ni chui); ==, !=, <, >, >=, <= (so snh); << (xut), >> (nhp)
i s sang chui: to_string(), to_wstring()
Cc lp cha (Containers)
Mng: vector
V d s dng:
int p[] = {4, 2, 6}; vector<int> a(p, p+3); a.push_back(1); a.insert(a.begin() + 2, 3); a.insert(a.end() - 1, 5); a[3] = 10; //
vector<int>::iterator i; // duyt xui for (i = a.begin(); i != a.end(); i++) *i += 5; vector<int>::reverse_iterator j; // duyt ngc for (j = a.rbegin(); j != a.rend(); j++) cout << *j << ' ';
5
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
iterator
Cc lp cha ca STL (vector, list,) c nh ngha kiu iterator tng ng duyt cc phn t (theo th t xui)
Mi iterator cha v tr ca mt phn t Cc hm begin() v end() tr v mt iterator tng ng vi cc v tr u v cui Cc ton t vi iterator:
i++ i-*i phn t k tip phn t lin trc gi tr ca phn t
Cc hm rbegin() v rend()
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
list<double>::iterator i = l.begin(); // phn t u *i = 4.122; // gn gi tr i++; // phn t k tip l.insert(i, 5.0); // chn phn t l.erase(i); // xo phn t l.sort(); // sp xp (tng dn) for (i = l.begin(); i != l.end(); i++) // duyt xui cout << *i << ' ';
7
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
vector<float>::iterator p = max_element(a.begin()+2, a.end()-3); list<string>::iterator p = min_element(l.begin(), l.end()); Da trn cc ton t so snh cn nh ngha nu cha c
Tm ng gi tr:
Thut ton: sp xp
Sp xp mng:
sort(a.begin(), a.end());
Sp xp danh sch:
Xut/nhp (Input/Output)
10
Tng quan
Trong STL, vic xut nhp c thng qua cc lung thng tin (data streams) #include <iostream>
Mi kiu i tng mun lm vic c vi cc lp trn cn phi c nh ngha ton t >> v <<
11
S cc lp xut/nhp
ios_base basic_streambuf<> streambuf/wstreambuf
basic_ios<> ios/wios
basic_filebuf<> filebuf/wfilebuf
basic_istream<> istream/wistream
basic_ostream<> ostream/wostream
cin
basic_iostream<> iostream/woistream
basic_ifstream<> ifstream/wifstream
basic_fstream<> fstream/wfstream
basic_ofstream<> ofstream/wofstream
vo/ra file
vo/ra chui
12
Vo/ra chun
Cc i tng
cin thuc kiu istream, tng ng vi stdin cout thuc kiu ostream, tng ng vi stdout cerr thuc kiu ostream, tng ng vi stderr Cc i tng wcin, wcout, wcerr lm vic vi Unicode
int i; float a[10]; cout << "Nhap i va a[i]: "; if (cin >> i >> a[i]) { cout << "a[" << i << "] = " << a[i] << endl; cout.flush(); } else cerr << "Nhap du lieu loi" << endl; string s; getline(cin, s)
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
V d:
c mt dng:
Ch trnh s dng ln ln vi cc hm ca C
13
Cc hm thay i nh dng:
dec/hex/oct: s nguyn h c s 10/16/8 fixed/scientific: s thc dng thp phn hoc k php khoa hc internal/left/right: cn l
V d:
cout.width(10); cout.setf(ios::right | ios::fixed); cout.precision(3); cout << 34.5678;
Dng cc manipulator:
Bao gm: internal, left, right, dec, hex, oct, fixed, scientific, setprecision(p), setw(w), setiosflag(flags), endl, ends, flush #include <iomanip> V d:
cout << setw(10) << right << fixed << setprecision(3) << 34.5678;
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
14
c/ghi file
#include <fstream>
S dng ifstream (file ch c), ofstream (ch ghi), fstream (c/ghi) c/ghi d liu dng cc ton t >> v << tng t nh vi vo/ra chun M file:
ifstream f1("ten file", ios::in | ios::binary); ofstream f2; f2.open("ten file", ios::out | ios::trunc);
Cc mode:
app ate
in
Lun nhy con tr ti cui file khi ghi Con tr ti cui file
Cho php c
trunc binary
out
ng file:
f.close();
C th ng file t ng trong destructor khi cc i tng b hu
Ch khi dng fstream dng c c v ghi: trc khi chuyn t vic c sang ghi hoc ngc li, phi dng hm seekg/seekp(...)
15
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
Ghi d liu:
Di chuyn con tr c file: file.seekg(int pos, ios::beg/cur/end) V tr con tr c hin ti: file.tellg()
Di chuyn con tr ghi file: file.seekp(int pos, ios::beg/cur/end)
16
bool copy_file(const char* src, const char* dst) { ifstream fs(src, ios::in | ios::binary);
} return true; }
17
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
Vo/ra vi chui
#include <sstream> S dng istringstream (file ch c), ostringstream (ch ghi), stringstream (c/ghi)
c t chui:
Ghi ra chui:
ostringstream str; str << "i=" << i << ", d=" << d << ", c=" << c;
string s = str.str(); Dng nh dng d liu ra chui
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
18
operator <<(ostream& os, char c); operator <<(ostream& os, const char* s); operator <<(ostream& os, double n);
operator >>(istream& is, char& c); operator >>(istream& is, const char* s); operator >>(istream& is, double& n);
is >> a >> b >> c; os << a << b << c; ostream& operator <<(ostream& os, const Ellipse& e) { return os << e.rx << e.ry; } istream& operator >>(istream& is, Ellipse& e) { return is >> e.rx >> e.ry; }
19
L vic chuyn i mt i tng bt k thnh mt lung thng tin c th t c th ghi ra ri c li ng dng trong vic truyn tin v lu tr d liu Vi STL, ta c th nh ngha cc ton t >> v << thc hin serialize V d:
operator >>(istream& is, SinhVien& sv) { is >> sv.ten >> sv.khoa >> sv.nam_sinh;
operator <<(ostream& os, SinhVien& sv) { os << sv.ten << sv.khoa << sv.nam_sinh;
20
Bi tp
1.
2.
Vit chng trnh nhp mng s nguyn c s phn t bt k t bn phm ri in ra cc s chn bng cch duyt mng Sa bi trn thay duyt mng bng dng hm find_if(...) in ra cc s chn Sa li chng trnh trn dng DSLK thay cho mng Cho hai mng a1 v a2 u c gi tr tng dn, vit hm trn hai mng ny thnh mng a3 cng c gi tr tng dn c d liu t file v lu di dng danh sch cc dng, sau in ra cc dng c di t 10 n 20 k t
3. 4.
5.
6.
7.
nh ngha ton t << v >> cho lp Fraction v th dng n xut/nhp d liu vi cin/cout, file, chui nh ngha cc ton t << v >> cho lp Complex c/ghi d liu di dng nh phn
EE3490: K thut lp trnh HK1 2011/2012 o Trung Kin H Bch khoa H Ni
21