Download - shmeiwseis gia th C++
-
pi pi
pi C++
-
Copyright c 2004 , [email protected]
pi LaTEX2.pi (c , -pi ).
pipi 23 2006. pi pi- http://www.materials.uoc.gr/tetycpp
-
i
1 11.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 pi 52.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 pi . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.1 pi . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.2 pi . . . . . . . . . . . . . . . . . . . . . . . . 72.2.3 pi . . . . . . . . . . . . . . . . . 82.2.4 pi . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.5 pi . . . . . . . . . . . . . . . . . . . . . . . 102.2.6 void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.7 Enumeration . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4 . . . . . . . . . . . . . . . . . . . . 132.5 . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.1 typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5.2 pi . . . . . . . . . . . . . . . . . . . . . . . 152.5.3 pi . . . . . . . . . . . . . 152.5.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.6.2 (struct) . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.8 (namespace) . . . . . . . . . . . . . . . . . . . . . 262.9 (streams) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.9.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 282.9.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.9.3 . . . . . . . . . . . . . . . . . . . 292.9.4 . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
i
-
ii
3 373.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.1 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.1.2 ?: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.1.3 switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.1.4 goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.1.5 assert() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.2.1 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.2.2 do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.2.3 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.2.4 continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.2.5 break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3 . . . . . . . . . . . . . . . . . . . . . . . . . 433.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4 494.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.4 . . . . . . . . . . . . . . . . . . . . 54
4.4.1 . . . . . . . . . . . . . . . . . . . . . . 544.4.2 pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.4.4 . . . . . . . . . . . . . . . . . . . . . . 61
4.5 main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.6 overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.7 template . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.8 inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.9 pi . . . . . . . . . . . . . . . . . . . . . . . . . . . 684.10 C++ . . . . . . . . . . . . . . . . . . . 684.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.11.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5 Standard Library 755.1 . . . . . . . . . . . . . . . . . . 76
5.1.1 (Pair) . . . . . . . . . . . . . . . . . . . . . . . . . . 765.1.2 . . . . . . . . . . . . . . . . . . . . . 765.1.3 , . . . . . . . 77
5.2 (containers) . . . . . . . . . . . . . . . . . . . . . . . . . 795.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795.2.2 vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.2.3 deque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895.2.4 list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.2.5 set multiset . . . . . . . . . . . . . . . . . . . . . . . . . 955.2.6 map multimap . . . . . . . . . . . . . . . . . . . . . . . 99
5.3 (algorithms) . . . . . . . . . . . . . . . . . . . . . . . . 1035.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
-
iii
6 1136.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.2.1 Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206.2.2 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206.2.3 Copy constructor, assignment operator . . . . . . . . . . . . 1206.2.4 Other operators, overloading . . . . . . . . . . . . . . . . . . 120
6.3 template . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
pi . . . pi! 121
Fortran C 125.1 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2 Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . 126
pi 129
135
137
138
-
iv
-
pi pipi pi pi pi ISO C++, , pi pi.
C++ , , pi pi pi pi pi , pi pi Fortran C. pipi C++ pi pi . pipi pi C++pi Standard 1998, , , pi pi, pi, pi pi pi pi pi pi pi pi.
pi pi, pi C++ C. pi STL pi . pi pi pi pi C++ pi pi ( pi pi ).
v
-
vi
-
1
pi pi . pi- pi, pi pi, pi pipi pi . , pi , pi pi pi pi pi pi pi , , pi .
pi pi pi(Fortran, C, C++) pi pi, , - pi, pi pi ( pi) pi. pi pi - pi pi pi pi. pi , pi pi pi , pi , - pi pi . pi pi pi pi . pi - pi pi pi pi, ,pi pi .
pi pi C++ pi . pi C++ pi pi pipi .
1.1
pi pi pi - pi : pi pi . pi pi C++ pi pipi - , :
1
-
2 1.
#include
/*main:
Takes no arguments.Prompts for a real number and prints its square.Returns 0.
*/intmain() {
double a; // Declare a real variable
// Print text on screenstd::cout > a; // Get value from keyboard
// Print text on screenstd::cout
-
1.1. 3
pi . pipi pi . pi pi - , pi main(). pi pi main() pi pi pi .
double a; pi pi () 15 a (2.2.5). C++ pipi , pi pi compiler, pi pi.
std::cin std::cout pipi pi , , standard input standard out-put . () pi std::cin ( ) pi pi pi pi . pipi pipi, pi, pi standard header (2.9). - , pi pi, C++ format / . pi - pi pi pi pipi., , pi pi.. pi pi pi (2.9.4).
pi (") pi , C-style string. pi pi - pi \n (pi ), pi pi . pi - () pi pi (pi pi , (\)) pi pi pi (character literal, 2.2.2).
(*) pi pipi pi pipi.
(;) pi (, , - ). pi pipi ( pi #) ;.
C++ pi pi , pi. pi pi - C++ . ( pi pi - ). pi, , pi pi (+=, ==,
-
4 1.
1.2
1. , pi.2
2. pipi pi pi pi . pi +,-,*,/ ( pi ). pi pi pi .
3. pi pi C++ ;#include main(){std::cout > a >> bcout
-
2
pi
2.1
2.1.1
C++ pi . pi compiler pi
// , pi /* */ pi pi
pi .
/* */ pi pi pipi pi tab, . pi pi pi .
:
// This is a commentint j; // Here is a declaration/* Let us make
an ugly multi-linecomment.
*/
pi pi pi , , pi , pi pi.
pipi pi- . , pipi pi : compiler pi pi- #if 0.....
#endif
pi pipi pi, pi (pipi ). pi, # pipi pi pi pipi-.
5
-
6 2.
2.1.2
, , pi, pi. C++ pipi (az,AZ), (09), underscore (_). pi . pi pi pi C++ , pipi pi . pi underscore (_) pi pi- pi compiler pi pi pi pi.pi, pipi pi C++ (Keywords, 2.1) , , pi pi pi-, pi.
:
pi :ena lathos onoma, pali_latho$, 1234qwer, delete, .onoma+
pi :timi, value12, ena_onoma_me_poly_megalo_mikos, sqrt, Delete
C++ Keywordsand and_eq asm auto bitand bitorbool break case catch char classcompl const const_cast continue default deletedo double dynamic_cast else enum explicitexport extern false float for friendgoto if inline int long mutablenamespace new not not_eq operator oror_eq private protected public register reinterpret_castreturn short signed sizeof static static_caststruct switch template this throw truetry typedef typeid typename union unsignedusing virtual void volatile wchar_t whilexor xor_eq
2.1: C++.
2.2 pi
C++ pi pi pi pi - pi pi :
2.2.1 pi
pi (bool) pi pi- pi pi pi (pi.. /, /,. . . ). , pi.. a, :
bool a;
-
2.2. 7
pi pi pi true false. pi pi, a pi pi pipi, pi (4.4), ( 6) namespace (2.8), pi (global) false.
pi pi-:bool a = true;
, ,bool a(true);
pi bool pi pi pi, pi pi , pi, . pi , true 1 false 0. , pi true 0 false.pi, , 4.3, pi pi true false.
2.2.2 pi
pi (char) pi.. c, :char c;
pi pi pi pi pi pi, pi, ASCII.
char c = a;
, ,char c(a);
pi c , a. pi pi- () (") pi C-style string1 pi pi pi pi char.
pi pi pi. 2.2, pi pi ( ) pipi. ..char newline = \n;char bell = \a;char alpha = \141; // alpha = a in ASCIIchar Alpha = \x61; // Alpha = a in ASCII
pi pi C-style string.
: 1pi array of const char.
-
8 2.
std::cout
-
2.2. 9
2.2.4 pi
(pi.. pi int) :int i;
pipi pi , namespace, i pi 0, pi. (pi.. 10) int i = 10;
, , int i(10);
pi pi pi pi. pi int pi 16 bi-ts, pi pi pi
[215, 215
)=
[32768, 32768) . pipi pi pi std::numeric_limits::min() std::numeric_limits::max(), pi header :#include #include
intmain() {std::cout
-
10 2.
pi long int pi L l :
12L, 0xBABEL, 665l
pi U u pi unsigned int, - pipi pipi unsigned long int.
2.2.5 pi
C++ pi pi : pi (float),pi (double) (long double). float double pi long double. pi float pi pi std::numeric_limits::digits10 pi std::numeric_limits::min() std::numeric_limits::max() pi header . pi. std::numeric_limits::min() pi pi pi- .
pi pi , -pi pi pi double, pipi pi pi pi.
, pi pi ( pi) pi pi double. pi pi pi . e E, pi, pi 10 pipipi pi e/E :
2.034, 0.23, .44, 23., 2e 4 ( 0.0002), 2.3E2 ( 230.0) .
F f pi float L l pi long double.
2.2.6 void
pi void pi pi pi- pipi. pi pi pi -, pi pi . pi void* ( void) pi. pi pi - pi .
-
2.3. 11
2.2.7 Enumeration
Enumeration () pi pipi pi pi pi. ..
enum Color {RED, GREEN, BLUE};
pipi pi, pi Color, pi pi pi pi pi: RED, GREEN, BLUE. pi :
Color c = RED;
switch (3.1.3), compiler pi pi pi.pi, pi pi (4.4).
pi : pi pi pi pi 0. pi RED 0, GREEN 1 BLUE 2. pi pi pi pipi, pi pi pi 1 pi pi :
enum Color {RED, GREEN=5, BLUE}; // RED = 0, GREEN = 5, BLUE = 6
pi . -, pi enum . :
color d = 2; // Error
2.3 pi
pi pi C++ pi class template, pi pi .
C++ pipi pi header
#include
pi pipi. (pi.. z) pi, pi
pi double :
std::complex z; // z = 0.0 + 0.0 i
, double pi pi pipi pi (int, float, long double,. . . ). -, 0, pi pi ,pi pi pi pi pi STL.
pi pi pi pi :
-
12 2.
std::complex z1(3.41); // or z1 = 3.41;// z1 = 3.41 + 0.0i
std::complex z2(3.0,2.0);// z2 = 3.0 + 2.0i
std::complex z3(z2); // or z3 = z2;// z3 = z2
std::complex z4(std::polar(2.0));// z4 = 2.0 exp(0.0i)
std::complex z5(std::polar(2.0,0.75));// z5 = 2.0 exp(0.75i)
std::polar() pi (magnitude) pi (phase angle) ( rad) .
+,-,*,/ +=,-=,*=,/= (2.7) - , pi pi pi . pi, C++ (4.1) , pi pi. std::abs() pi . pipi, std::norm() pi std::arg() z = + i
std::abs(z) =2 + 2,
std::norm(z) = zz? 2 + 2,std::arg(z) = arctan(/).
, std::conj() pi . pipi pi pipi pi ,pi, pi pi pi .
pi z pi , std::real(z) std::imag(z), std::complex: z.real() z.imag().
pi pi pipi , pi compiler:std::complex z(3.0,1.0);// z = 3.0 + 1.0i
z = std::complex(z.real(), 3.7);// z = 3.0 + 3.7i
z = std::complex(2.3, std::imag(z));// z = 2.3 + 3.7i
z = 5.0; // or z = std::complex(5.0);// z = 5.0 + 0.0i
z = std::complex(-1.0, 2.0);// z = -1.0 + 2.0i
-
2.4. 13
(pi,)
pi >> pi pi :
(pi,)(pi)pi
pi, , typedef (2.5.1).
2.4
C++ pi pi - ( 2.3). pi pi
== != > < >= 2.0 true 2!=1+1 false. pi pi .
, pi -, (==, ) (!=, ). pi pi , pi pi .
C++ pi !(NOT), && (AND), || (OR).
pi pi, pi pi:
! pi :
! (4 > 3) false. ! (4 < 3) true.
pi && true pi true. pipi false:
(4 > 3) && (3.0 > 2.0) true (4 < 3) && (3.0 > 2.0) false
|| pi true pi pi true, false:
(4 > 3) || (3.0 < 2.0) true (4 < 3) || (3.0 < 2.0) false
-
14 2.
C++, pi pi bool:bool a = 3==2;bool b = ( (i > 0) && (i < max) );
C++: pi pi pi pi pi (short-circuit evaluation). .. (i < 0) || (i > max) i < 0 true pi , pi pi. , (i < 0) && (i > max)
i >= 0 false pi i > max. pi pipi pi pi pi- .
2.5
2.5.1 typedef
pi , pi-. pi , pi , pi typedef. , pi pi.. std::complexpi pi pi complex pi :typedef std::complex complex;
pi pi :complex z;
typedef pi -pi pi pi : pi pi pi . pi double. pi pi pi pi , pipi pi double pi float. , - pi pi real pi pi typedef double real;
pi pi float :typedef float real;
typedef pi C++ pi pi- template functions (4.7).
-
2.5. 15
2.5.2 pi
pi - pi, compiler pi pi pi , , pi pi pipi pi pi pi . pi pi pi const pi pi ( ) :
double const pi = 3.141592653589793;int const maximum = 100;
pi pi const pi .
pi pi . pi pi (pi..pi pi, ) pi pipi pipi pi .
2.5.3 pi
pipi blockpi block pipi pi pi. pi pipi . pi pi , pi , pi . pi , pipi pi , namespace ( global) , pi 0 (pi pi). pi , static (4.9), pipi pi compilerpi pi .
pi pi C++ pi- pi, pi pi C:
int a = 3;
pi 2.3, pi pi pi (pi C++) pi pi pi . C++ pi,
std::complex z(1.0,2.0); // z = 1.0 + 2.0 i
pi pi pi pi pi :
int b = 4;int b(4);
-
16 2.
, pi pi (pi.. int) - pi (pi.. std::complex), pi -pi pi :int c = int(3); // c = 3
std::complex z = std::complex(3.0, 2.0);// z = 3.0 + 2.0i
int d = int();// d gets default integer value, 0.
std::complex y = std::complex();// y gets the default value specified// in complex class, 0.0 + 0.0i.
pi - pi pi pi pi pi templates (4.7,6.3).
pi pi . int a;int b;
pi int a,b;
pi pi pi pi pi pi . .. int * a,b;
(pi pi), a, , b. pi pi pi pi .
2.5.4
, , , pi pi pi- pi 2 } block pi. (global) pi, pi pi (4.4), ( 6) namespace (2.8), - pi ( pi #include). pi pi , pi. , pipi pi, pipi pi pi. pi 3 pi .
pipi pi pi - pi block . ..
2 pi.
-
2.6. 17
#include
intmain(){ // begin block Adouble x = 3.2;
{ // begin block Bint x = 5;
std::cout
-
18 2.
double temperature[365];
int const N = 155;int telephone[N];
telephone pi pi pi pipi .
pi, pi.. temperature, pi 0 D1 pi D . pi, , pi 0. ..
temperature[0] = 14.0;temperature[1] = 14.5;temperature[2] = 15.5;temperature[3] = 13.0;temperature[4] = 15.0;//.........
int i = 3;
std::cout
-
2.6. 19
pi . pi, 6 8 pi int a[6][8];
pi.. (3,2) pi pipi a[3][2].pi , :
int b[2][3] = { {0, 1, 2}, {3, 4, 5} };
pi, -, pi pipi pi. pi , , , pi - pi (row-major order). Fortran pi (column-major order). pi, pi pi C C++ pi pi Fortran.
, pi , pi -, pi column-major order :
pi [Ai j] N1N2, C++ pi N1 N2. Ai, j a[i+ N1*j].
pi [Ai jk] N1N2N3, pi N1 N2 N3. Ai, j,k a[i + N1 * (j + N2 * k)].
pi . pi pi pi pi C pi pi pi pi, pi Fortran ,pi, pi .
pi , C++ pi pipi pi pi. pipi, Standard Li-brary (STL) pi pi - pi . pi pi std::vector pi header : pi v, 30 pi pi.. double std::vector v(30);
pi . pi , pi pi pi :
:
#include #include
int main() {
-
20 2.
int N;
std::cin >> N; // get dimensionstd::vector v(N);
// v[0], v[1], ..., v[N-1]}
pi, pi v - pi C++. pipi pi pi std::vector 5.
2.6.2 (struct)
pi pi pi.. . pi , pipi , , , ,pi. pi pi , pi . pi pi C++ std::string pi header . pi pi, pipi pipi , :struct ChemicalElement {
double mass;int Z; // atomic numberstd::string name;std::string symbol;
};
(;) pi }. ( ) pi C++ pi };.3
pi ChemicalElement pi- struct pi , , pi ( ) pi. pi pi . pi ChemicalElement pi pi-pi pi pi:ChemicalElement oxygen;
pi pi pi pi pi pi pi pi , pi , pi..ChemicalElement hydrogen = {1.008, 1, "Hydrogen", "H"};
(.) pi (.) :oxygen.name = "Oxygen";oxygen.mass = 15.99494;oxygen.Z = 8;oxygen.symbol = "O";
3 pi .
-
2.7. 21
std::cout
-
22 2.
b = a + c;a = a-1;
++ -- - pi pi pi pi , pi, pi, pi , pi .
2.4 pi pi pi . pi, pi pi pi . pi . ( ) pi pi pi pi compiler pi . .. a--b (a--)b ( ) pi a-(-b). pi pi pi pi.
pi pi pi - pi compiler pi ( , ) pi . pi.. pi int double -pi int double pi pi pi. pi pi pi int (pi bool char) pi int pi pi, . pi pi pi pipi pi: pi.. pi bool char;
pi pi pi , ( - pi pi ) pi. pi pi, pi.. pi . pipi pi pi pi . pipi, pi pi pi pi pi ( pi) pi.5 int a = 3.14; // a is 3short int b = 12121212121.3; // b = ??
pi pipi pi pi - pi. pi , (/) pi pi (/) . pi pi pi (pi) pi pi- pi /. pi pi pi static_cast:int sum = 2 + 3 + 5;int N = 3;
// Wrong valuedouble mean1 = sum / N;
5 compiler pipi pipi.
-
2.7. 23
C++pi .pi -> () pi pi []/ ( ) ++, -- sizeof pi sizeof()/ (pi ) ++, --bitwise NOT & pi * NOT ! /pi +, -pipi * ( pi) /pipi % + -pi , >>, = == !=bitwise AND &bitwise XOR bitwise OR | AND && OR || 4 ?:pi =pipi *= /=pipi %= += -=pi =bitwise AND &=bitwise XOR =bitwise OR |= ,
2.4: pi ( -) pi . pi.
4 pi (?:) (=) 3.1.2.
-
24 2.
// Correct valuedouble mean2 = static_cast(sum) / N;
static_cast :static_cast(variable);
pi pi pi :
(newtype) variable newtype(variable).
pi . pipi pi pi -
pi overloaded , pi - pi . .. - , std::sqrt() pi pi float, double,long double int pi pi . pi 4.6, pi pi compiler C++ , pi pipi pi pi :#include
intmain() {
int p = 8;
double riza = std::sqrt(p);// Error, ambiguous
double r = std::sqrt(static_cast(p));// Correct. Calls sqrt(double).
}
C++ - pi pi pi pi pi , pi..int a;int b;
b = a = 3;//First a = 3; then b = 3;
bool cond;
cond = b < 5;// First check b < 5; true. Then cond = true.
2.7.1
sizeof
sizeof pi pi pi bytes.6 pi pi pi
6 , byte char.
-
2.7. 25
sizeof:
int a;
std::cout
-
26 2.
bitwise NOT expr pi expr1 >> expr2& bitwise AND expr1 % expr2 bitwise XOR expr1 expr2| bitwise OR expr1 | expr2
= expr2&= bitwise AND expr1 %= expr2= bitwise XOR expr1 = expr2|= bitwise OR expr1 |= expr2
2.5: bit C++.
pi bit - (true/false, on/off,. . . ) pi . C++ bitset std::vector bool pi pi pi, pi.
pi pi pi pi bool, pi- pi pi , pi pi pi bit byte, (2.2.4).
2.8 (namespace)
pi pi - pi pi ( pi ) pi - . .. pi pi pi pi solve, - pi pi pi pi pi . C++ pi namespace ( ) pi . pi:
namespace onoma {......
double a;......
}
a ( pi , , -, pi. pi) namespace onoma. pi namespace pipi pi pi : onoma::a. namespacepi pi pi (a). pi pi- pi . , pi namespace pi
-
2.9. (STREAMS) 27
pi pi . namespace C++
(2.1.2). pi pi pi pi Standard Library (STL) -
namespace std. pi cin, cout,complex pi pi std::. pi- , pi namespace pi.. std, pi using namespace std; block pipi . pi - block pi pipi std::. ..
#include #include
// "std::" needed heretypedef std::complex complex;
intmain() {using namespace std;
// "std::" not needed herecomplex a(2.0,3.0);complex b(1.0);
// In the following cout "std::" is not neededcout
-
28 2.
standard error pi . pi- pi pi pi- pi, pi pi.. pipi pi . pi pi pi pi , pi pi.. pi pi pi , - pi pi pi , pi pi.. pi . pipi streams header .
2.9.1
pi streams pi streams - . header pi std::ifstream std::ofstream. std::ifstream inpstr("filename");
stream , inpstr, pi "filename". , pipi pipi., std::ofstream outstr("filename");
stream , outstr, pi "filename". pi, .
std::ofstream outstr("filename", std::ios_base::app);
"filename" stream outstr .
pi: inpstr, outstr ( pi, , pi pi) pi std::cin std::cout pi . , double a = 10.0;
outstr > c;
pi a pi outstr c pi inpstr.
pi pi . pi pipi pi stream str (pi.. ) , pi : str.close();. stream str str.open("filename");.
2.9.2 Strings
(streams) -, . C++ strings, pi pipi.
-
2.9. (STREAMS) 29
pi header pi , pi std::istringstream std::ostringstream. pi - pi ostringstream C++ string -pi pi. pi - string, . pi C++ string pi pi "filename_3.dat":#include
intmain() {std::ostringstream os;
os j; // j = 6is >> k; // k = 7
char ch;is >> ch; // ch = a
}
2.9.3
pi pi, pi pi pi STL, (stream) standard output, standard error, string,
-
30 2.
pi std::cin pi >>, pi pi pi :
double a;int b;
std::cin >> a;std::cin >> b;
( ) . pi
pi . pi..
std::cout
-
2.9. (STREAMS) 31
2.9.4
manipulators pi pi C++, boolalpha noboolalpha, pi pi pi - pi, pi bool. header pi pi
(no)skipws: () . (no)showpos: () pi pi + . (no)showpoint: () pi 0 . scientific: pi pi d.dddddddd fixed: pi pi dddd.dd left/right: pi / pi.
header pi pi
setprecision() pi ( pi ) pi pi pi. pipi 6.
setw() pi pi pi pi ( ) pi pi. pipi 0.
setfill() pi pi - setw() pi pi . pipi .
manipulators namespace std.
:
#include #include #include
intmain() {
double b = 3.25;
std::cout
-
32 2.
std::cout
-
2.10. 33
int a = 2, b = 3, c = 4;double x = y = 5;bool equal = b = 3;int d = d;int e = "e";
6. compiler; pi;
7. pi pi pi com-piler; ;
#include #include
intmain() {
int a = std::numeric_limits::min() - 10;int b = std::numeric_limits::max() + 10;std::cout
-
34 2.
() m%n++() m%++n() ++m=n--() m=n=3() m+=n-=2() m*=++n() m+=--n==m--
11. pi pi :
() (50 - 5 * 4) / 10 - 7() 12 + -5 * 2 + 6 / 3() 1 + 2 + 3 + 4 + 5 + 1 * 2 * 3 / 4 * 5() 3 > 7() (3 > 7) || (4 < 9)() 135 == 100 + 35() (true && false) || (true || false)() (3 > 7) || ((10 < 9) == (3 == 8))() false || !(3 > 7)() 3!=6
() 6 / 4 * 5 == 6 * 5 / 4
12. pi pi pi
() 7 / 2() 7.0f / 2() ((7 / 2) == (7.0 / 2))() ((6 * 3) / 80) / (36 - 7 * 5)
13. C++ pi 1 n.
14. pi a, b pi c pi a.
15.
() ++x+=+a++-+b++() ++x-=-a+b++() -x---a---b--
16. pi pi ; pi .
17. C++ pi pi pi :
() d.
-
2.10. 35
() pi r.() d h.() pi c
a,b pi.
18. pi pi pi :
() a==b||a==c&&c
-
36 2.
-
3
3.1
3.1.1 if
if pi pi-. () , pi pi. C++ - :
if (condition) {... // block A
} else {... // block B
}
(condition) pi pi , - block pi pi pi {} (block A). , block else (blockB).
block pi pi pi , , pi . pipi pi pi pi pi ({}) pi pi. ..
if (val > max)max = val;
else {max = 1000.0;++i;
}
pipi pi else block pi pi :
if (condition) {...
}
block pi pi pipi if. if (condition) {...} else {...} . block pi
37
-
38 3.
() . pi pi .
pipi if, pi pielse . else pi if block. pi, pi pi ,pi :
if (i == 0)if (val > max)
max = val;else
j = 10; pi, j = 10; i 0 (val > max) (i == 0). pipi pi pi pi pi :
if (i == 0) {if (val > max)
max = val;}else
j = 10;
3.1.2 ?:
(?:) C++.
if (condition)val = value1;
elseval = value2;
val = (condition ? value1 : value2);
,
(condition ? : )
condition , .
pi pi pi (?:) - pi pi, . pi - pi (=) pipi pi pi pi. , pi : (?:) (=) pi, pi pi pi . pi, a = b ? c : d
a = (b ? c : d)
-
3.1. 39
a ? b : c = d
a ? b : (c = d)
3.1.3 switch
switch pi pi pipi if. :
switch (i) {case value1:...
case value2:...
...
...
case valueN:...
default:...
}
i pipi pi (char, int, (short int, long int) signed unsigned pi ) enum. pi pi pi pi pipi pi pi pi pi pi pi pi pi.
value1, value2,. . . ,valueN pipi pi enum ( pi).
, i pi value1,value2,. . . ,valueN. pi , pi case. pi case / default pi, pi break ( pi.. goto, return, throw). break pi switch. value1, value2,. . . ,valueN block default, pi. , } switch.
case default pi pipi.
: pi pi
pi pipi . pi +, -, *,/. pipi pi pi pi pi pi pi. pi
#include int
-
40 3.
main() {double a, b, res;char c;
std::cin >> a >> b;std::cin >> c;
switch (c) {case +:
res = a + b;break;
case -:
res = a - b;break;
case *:
res = a * b;break;
case /:res = a / b;break;
default:std::cerr
-
3.2. 41
:assert(integer_number);
integer_number 0, pi pi, pipi NDEBUG pi pi header. pi pi, pi pi assert() .
, assert() debugging, pi pi pi 0 false ( , 2.2.1), pi pi . pi.. pi assert(N
-
42 3.
, pi . pi 1 ( block).
3.2.3 for
pi pi forpi pi pi pi pi. C++ for pi pi . :
for (initial_statement ; condition ; final_statement) {...
}
for :
1. initial_statement. pi ( (,), 2.7.1).
2. condition.
, pi for. , block {}.
pi block ( break, return, goto,throw,. . . ) final_statement.
3. block , pi 2( ). pi pi .
pi pi initial_statement, condition, final_statement pi pi. pi (condition) for .
initial_statement pi , - pi for, , , }.
: 10 pi pi a 0, 10, 20, . . . 90 pi :
for (std::size_t i = 0; i < 10; ++i)a[i] = i*10;
i pi pi . pi , std::size_t i; pipi pi for:
std::size_t i;for (i = 0; i < 10; ++i)
a[i] = i*10;
// here i is 10
-
3.3. 43
3.2.4 continue
continue pi for, while,do while. pi , pi pi .
3.2.5 break
break pi while, do while,for, switch. pi pi pi- , pi pi .
3.3
block pi pi pi , , pi . pipi pi pi pi pi ({}) pi pi.
if while pi - ( pi) pi . pi .
:
if (int j = 3) max = 10 + j;
j if. (3) true.
3.4
1. ()
for (;;) {...
}
() pi for pi while. pi do while;
2. pi pi:
#include
intmain() {int j = 3;
if (j = 4) {std::cout
-
44 3.
; ; . pi - ;
3. C++ pi pi
ex
ex =
n=0
xn
n!,
sin x
sin x =
k=0
(1)k x2k+1(2k + 1)! ,
cos x
cos x =
k=0
(1)k x2k(2k)! .
pi pi-pi pi pi pipi - pi.
4. pi pi 8 . rand() pi - pi 0 RAND_MAX. pi - RAND_MAX compiler; srand().1
5. () 1000 [20, 20]. pi pi (pi-pi !)
int r = -20.0 + 41.0 * (std::rand() / (RAND_MAX+1.0));
() pi C++ pi pi pi , 0 pi.
6. pi C++ pi
() pi pi (n!) .() pi N pi Fibonacci2
f (n + 2) = f (n + 1) + f (n), n 0, f (0) = 0, f (1) = 1 .
() .() pi Lagrange3:
pi () .
1 UNIX man srand .2http://www.research.att.com/projects/OEIS?Anum=A0000453http://mathworld.wolfram.com/LagrangesFour-SquareTheorem.html
-
3.4. 45
7. pi C++ pi
() pi.() pi pi N. (-
: pipi 2,3,5,. . . ).() pi pi
4, p,p+6,p+12 pi , pi .
() pi pi pi
1 + (p 1)!p
(mod p) = 0 ,
Wilson primes5.
8. pi pi pi a, b, c pi 12 piax2 + bx + c. pi pi
x1,2 =b b2 4ac
2a,
( pi pi pi b2 4ac)
x1,2 =2c
b b2 4ac.
C++ std::sqrt() . . pi pipi pi pi. pipi pipi pi .
9. pi M N pi K pi 1 pipi 0.
() pi ( M = 20,N = 60) pi , x o pipi.
() pi .ppbm ( M = N = 512): pi : P1. : pi . 1 0 -
pipi pi ( - ).
pi pi plain pbm (portablebitmap) pi pi pi pi.
4http://www.research.att.com/projects/OEIS?Anum=A0479485http://www.research.att.com/projects/OEIS?Anum=A047540
-
46 3.
10. pi pi pipi piA (M N) B (N P). pipi pi pi ;
11. pi C++ pi pi Ax = B pi Gauss (Gauss elimination6). pi A B pi.
12. pi C++ pi pi pi - pi A pi GaussJordan (GaussJordan elimination7).
13. () pi pi 30 pi f (x) = x(x2 + 5 sin(x)) [5 : 5]. C++ std::sin() .
() pi C++ pi pi pipi pi f (x) [5 : 5] pi: x1, x2 x2
x1
f (x)dx 12x ( f1 + f2) .
Simpson: pi x1,x2, x3 x3
x1
f (x)dx 13x ( f1 + 4 f2 + f3) .
Boole: pi pi x1, x2,x3, x4, x5 x5
x1
f (x)dx 245x (7 f1 + 32 f2 + 12 f3 + 32 f4 + 7 f5) .
Durand: n pi x1, x2,. . . , xn xn
x1
f (x)dx x(
25 f1 +
1110 f2 + f3 + + fn2 +
1110 fn1 +
25 fn
).
pipi pi fi f (xi) x pi . pi [10 sin(5) 50 cos(5)]. pi pi .
14. Spline Fit. n (xi, yi). pipi 2(n 1) . pipi, pi pi- pi pi ( 2(n 2)
6http://mathworld.wolfram.com/GaussianElimination.html7http://mathworld.wolfram.com/Gauss-JordanElimination.html
-
3.4. 47
). pi pi pi 0 (2 ), pi , . pi pi (2). 4n 4 . pi pi pi pi pi pi pi .
() pi pi pi spline - pi pi pipi .
() pipi pi pi - .
() pipi pi pi pipi pipi -.
15. pi C++ pi pi Game of Life8 Dr. J.Conway. pi : pi M N, pi (- ). pi K -. ( ):
() - ().
() pi- (pi).
() pipi pi (pi- pi (pi pipi !.
pi pi pi- . pi pi plain pbm ( - 9) pi . pi pi pi , (, ).
8http://www.math.com/students/wonders/life/life.html
-
48 3.
-
4
4.1
pi pi pi pi C++, pi pi-pi . , , , main(), , , -. pi pi pi pi, , . pi pi -, pi, , , pi pi pi main() -, pi . pipi pi pi pi, .
pi pi pipi pipi pi -, pi, pi pi. pi.., pi pi, - pi , pi pipi ,pi, pi pi pi pi-. pi pi pi pi , pipi pi pi pipi pi pi pi .
pi pi pi (structured) (procedural) pi- pi pi pi pi pi C++.
pi pi , C++ pi .
49
-
50 4.
4.2
(reference) pi. ,pi.., a
int a;
pi (pi.. r) a :
int & r = a;
r pi pipi pi a. pi pi pi, pi &. pi ( ) pi pi ( pi,, pipi pi pi). pipi, pi pi pi pi pi .
pi, pipi a - r :
int a;int & r = a;
a = 3; // r = 3r = 2; // a = 2
int b = a; // b = 2
int c = r--; // c = 2, a = 1
int d;int & r = d; // Error
const, pipi :
int const a = 5;
int & r1 = a; // Error.
int const & r2 = a;// Correct. Value of a cannot change through r2.
r1 pi, pi a, pi const, r1.
, , pi, pi C++ pi -, , pi , . , pi- std::numeric_limits::digits10. pi pi pi pi:
#include #include
-
4.3. 51
intmain() {
int const & digits = std::numeric_limits::digits10;
std::cout
-
52 4.
int * q = p; q int p. , q p , , *q *p ( a).
pi piint a = 5;int * p = &a;void * t = p;
void pi p, int, ,, a. (*) p pi a , (*) t pipi. , void pipi pi pi static_cast pi (pi pi pipi ) pi pi pi pi . pipi ,
int * v = static_cast(t);
*v = 4;
a 4. pi pi -
pi . *) pi. pipi- pi pi pi - pi . , pi ( ) .
pipi pi pi 0. 0 pi , pi, pi . (null pointer) (*) pipi (pi pi). (pi.. ) 0 ( pi , 2.2.1) pipi pi pipi pipi pipi pi . pi : pi ,, pipi pi pi.
pi . pi ( pi pi ):
int a;
int * p1 = &a;int const * p2 = &a;int * const p3 = &a;int const * const p4 = &a;
p1 . p2 . pi
pi *p2.
-
4.3. 53
p3 . pi -pi *p3 pipi pi pi pi pi .
p4 . pi pi .
pipi pi pi - : pipi -.:
double x = 1.2;
double * const p = &x;
double y = 0.1;
p = &y; // error
double const * q = &x;
*q -= 0.2; // error
int const a = 2;
int * r = &a; // error
p pi pi pi, pi pi pi pipi *p. , p pi . pi ++,-- ( pi ) : pi T sizeof(T) pi . pi, pi pi (pi.. p+2) pipi sizeof(T). pi , , pi ( !) pi pi .2 pi pi pi void pi, pi pi, ( void *).
pipi pi - pi . , pipi pi pi pi pi:int a[10];
int * p = &a[3];
int * q = p + 2; // q == &a[5]2 pi std::ptrdiff_t pi .
-
54 4.
, int a[10];int * p = &a[0];
*(p+i) pi a[i] , , p+i == &a[i]. pi pi pipi pi pi pi pi pi.
pi , pi - . pi a[i] pi *(a+i).
: pi :
double b[10];
double * p = b;
for (int i = 0; i < 10; ++i)*p++ = 1.0;
2.6.2 pipi , pi.. member, (struct) , pi, , pi.. a, :
a.member
pipi pi , pa, pipi (- pi pi (*) (.), 2.4)
(*pa).member
pi pi C++ , pipi:
pa->member
4.4
pi pi pipipi pi pi . pi pi pi pipipi pi pi , ,pi 4.7, pi pi pi. pi pi pi pi pi pi. pipipi pi pi pi , pi pi .
4.4.1
:
pi_pi(pi__ , pi__ ,. . . ){
-
4.4. 55
// }
pi pi pi void pi pi- . , pi pipi pi pi pi pi (pipi, , pi ). pi , , pi void. , pi, pi pi (}).
pi pi- pipi pi pi, pi :
pi_ _pi [ ]
. pi, , pi pi. , int a[] int *a . pi pi pi pi, , pipi . containers STL pi 5 pi.
pipi pi , pi . compiler pipi , (pi ) pi pi . pi -. pi pipi ( {} pi) pi (;):
pi_pi(pi__ , pi__ ,. . . );
pipi pi pi . pi
. pipi pipi pi- . , pi pi headers, .h,3 pi pi pipi pi #include "name.h"
pi name.h header, pi - (pi, pi pi path ). headers pi pi pi ("). , headers pi pi pi ().
pi headers, compiler pi pi . ,
3 pi compiler
-
56 4.
pi , pi pi , headers.
: min/max pi pi /
pi :
min: < pi pi max: < pi pi
pi utilities.h (pi.. pi float)
// utilities.h
// declarationsfloatfmin(float a, float b);
floatfmax(float a, float b);
utilities.cc
// utilities.cc#include "utilities.h" // Not necessary but good practice
// definitionsfloatfmin(float a, float b) { return a> b;std::cout
-
4.4. 57
pi - pi , linking.
, pi pi pi (pi ), , pi pipi :int func(double a, double b = 5.0);
func() pi pi (pi a) pi b pi pipi, 5.0. , pi pi pi pi pi- pi , pi, compiler pi pipi .
4.4.2 pi
pi pi
return ;
pi pi pi . pi main() pi return: pipi return 0;.
pi pi ( pi void) pi pi return; ( ).
pi return, pi pi .
pi pi . pi pi pi pi pi pipi pi pi, pi- pi pi , .
4.4.3
pi , - pi pi pi pi ( pi pi ). pi pipipi , pi pipipi pipi pi pi , pi pi . pi- , pipi pi pi pi pi, pi !
:
#include #include
doublefunc(double a, double b);// declaration. The definition is elsewhere.
-
58 4.
intread(double & a, char const fname[]) { // definition
std::ifstream file(fname);file >> a;
return 0; // All ok}
voidprint(char c) { // definition
std::cout
-
4.4. 59
add3() pi, pipi - pi pi : x pi z (2.0), - 5.0 pi pi , . z pi 2.0.
pi pi pipi , pi..
void add3(double & x) { x+=3.0; }
, pi..
void add3(double * x) { *x+=3.0; }
pi -. pi pipi, pi , add3(z), pi x z pipi - z. , pi z, add3(&z). x pi z. x pi , *x pi pi .
pipi , pi , pi, pi , pi pi .
pi pi - ( , ), pi pipi, const. ..
voidprint(std::size_t const N, double const a[]) {
for (std::size_t i = 0; i < N; ++i)std::cout
-
60 4.
xp pi , pi *xp ( pi )
void f(double * xp); // xp cannot change, *xp can change
xp pi , *xp ( pi )
void f(double const * xp); // xp cannot change, *xp cannot change
pi a pi , pi
void f(double a[]); // a cannot change, a[i] can change
pi a pi ,
void f(double const a[]); // a cannot change, a[i] cannot change
(recursive)
C++ pipi . , pipi pi pi , pi pi.
: pi pi pi pi
(recursive) pi: ,
n! ={
1 2 (n 1) n = (n 1)! n , n > 0 ,1 , n = 0 .
pi, pi pi n pi pi- pi ( n 1). pi pipi pi C++
std::size_tfactorial(std::size_t n) {
std::size_t result;
if (n > 0)result = n * factorial(n-1);
if (n == 0)result = 1;
return result;}
pi pipi ( n pi pi pi- pi pi). factorial() factorial(n)factorial(n-1)
-
4.4. 61
factorial(n-2) . . . ( pi pi pi ) 0.
pipi pi pipi (?:),3.1.2:std::size_tfactorial(std::size_t n) {
return (n > 0 ? n * factorial(n-1) : 1);}
4.4.4
pi, , -.
pi pi f (x) pi , pi (x, y). pipi #include
double f(double x);
intplot(double low, double high) {
double const step = (high - low) / 100;
for (double x = low; x < high; x+=step)std::cout
-
62 4.
double f(double x); // declaration of f(x)
double (*fptr)(double x); // declaration of a pointer
fptr = f; // assignment
double x = 1.2;
double y = f(x);
double z = fptr(x); // or z = (*fptr)(x);
// y == z
pipi plot :
intplot(double low, double high, double (*f)(double x)) {
double const step = (high - low) / 100;
for (double x = low; x < high; x+=step)std::cout
-
4.5. MAIN() 63
4.5 main()
pi pi pi pi, main():
int main() {.....}
pi pipi pi main() pi - ( pi ) :
int main(int argc, char* argv[]) {........}
pi ( 4.4.3) :int main(int argc, char** argv) {........}
pi , argc, pi 1 pi pi pi main() ( 0, pi pi ). , pi char, argc+1 pi C-style string . argv[0] pi pi pi, argv[1], argv[2],. . . pi, ,. . . , - , argv[argc], 0. UNIX ( pi pi pi ) pi pi . , a.out
./a.out 12 input.dat output.dat 4.5
main(), , argc 5, argv :
argv[0] == "./a.out";argv[1] == "12";argv[2] == "input.dat";argv[3] == "output.dat";argv[4] == "4.5";argv[5] == 0;
1 4 pi . pi- main() pipi pi. pi pipi C++ header :
int atoi(char const * p); // C-string to intlong atol(char const * p); // C-string to long intdouble atof(char const * p); // C-string to double
pi strtod(). pipi namespace std. pi
#include #include
intmain(int argc, char *argv[]) {
int n = std::atoi(argv[1]);// n gets the value of the first argument
-
64 4.
double x = std::atof(argv[4]);// x gets the value of the fourth argument
std::ifstream filein(argv[2]);// open input file. Name is given in argv[2].
std::ofstream fileout(argv[3]);// open output file. Name is given in argv[3].
// ..........}
4.6 overloading
pipi pi pi pipi pi (), pi, pipi pi. pi pi pi- . C++ (overloading) -pi pi pi , pi pi pi , , . pi pi pi. pi C++ pi pi pi pi double, float long double.
pi , compilerpi (pi pi) pi pi. pi, , pi pi . pi , pi pi pi (pi.. bool, char, short int int, float double,. . . ). pi , int double, double long double, void*, pi. pi pipi pi , pi pi pi pi , .
( pi ) pi pi pi compiler pi pi pi pi pi pi.
4.7 template
C++ pi - pi pi templates (pi). - pi pipi pi pi -. pi pi (swap).
-
4.7. TEMPLATE 65
pi ,4 (int, float,. . . ), pi pi pi pi (, 6). overloading pi pi pi . pi pi :voidswap(int & a, int & b) {
int const temp = b;b = a;a = temp;
}
voidswap(float & a, float & b) {
float const temp = b;b = a;a = temp;
}
voidswap(double & a, double & b) {
double const temp = b;b = a;a = temp;
}
...
...
pi - pi pi pi. C++ compiler , pi pi pi (template) pi . template pi pi-:template void swap(T & a, T & b) {
T const temp = b;b = a;a = temp;
}
pi template (pipi ) T (pi pi pipi pi pi) pi. pi pi , pi -, pi pi . pi pi pi pi (pi template):
4 , std::swap() .
-
66 4.
template .5
template pi pi pi template :
double a = 2.0;double b = 3.0;
swap(a,b);
pipi pi pi template pi pi pi pi pi . pipi pi swap(a,b).
pi pi, pi template pi pi (int, char, bool,. . . ) , enum.6
, pi.., pi pipi . pi pi ( ) :
bool mult(int a, int b) {return !(a%b);
}
, mult(a,b). , b , pi template:
templatebool mult(int a) {
return !(a%b);}
mult(a). pi pi
template. pi pipi pi pi-
template pi . C++ pipi pi ( - pi pi- pi ) ( ) template pi pi export:
// util.ccexport template T const & max(T const & a, T const & b) {
return a>b ? a : b;}
// util.htemplate T const & max(T const & a, T const & b);5pi Standard 1998 pipi pipi pi tem-
plate , pi, pi.. template . pi pipi pi pipi pi .
6 pi .
-
4.8. INLINE 67
pi compilers pi export pi pipi pi header - template.
4.7.1
pipi pi pi pipi pi template pi (pi.. pi ) pi - pi, pi pi compiler pipi pi pi pi pi. pi.. swap() pi XOR swap pi - pipi. pi pi pi swap() :
templatevoidswap(int & x, int & y) {
x=y;y=x;x=y;
}
pipi, swap(a,b) pi -, pipi pi .
4.8 inline
pi pi pi pi , pi -. C++ compiler pi pi , , pi pi pi pi. pi pi . - compiler pi pi inline pi pi pi. , pi pi :
inline intmax(int a, int b) {
return a > b ? a : b;}
, , inline main(). inline pipi pi com-
piler pi pi, pi pipi.pi, pipi pi header pi .
-
68 4.
4.9 pi
pi . pi, pi pi . pi pi pi (0 pi ) pi pi , pipi, pi . pi pi static:
voidfunc(double a) {
static int howmany = 0;// .....
++howmany;}
howmany pi pi . func().
4.10 C++
pi C++ pi . - pi header pi float, double, long double. 4.1 pi- double. , pi . - C pi pi C++ pi. namespace std.
pi -. pi pi compiler pi pi pi pi . , pipi pi pi pi pi pi pi- , .
pipi pi pipi pi-pi , pi errno pi pi EDOM. pi , errno ERANGE:
#include #include #include #include
int main() {errno = 0; // clear error. No error code is 0.
std::sqrt(-1.0); // here errno becomes EDOM.
-
4.10. C++ 69
pi
doub
leabs
(dou
ble)
pi
.
doub
leceil
(dou
ble)
pi
pi
.do
uble
floo
r(do
uble
)
pi
pi
.do
uble
sqrt(d
oubl
e)
.
pipi
.
doub
lepow(d
oubl
ex,
doub
lea)
,x
a.
pi
a>0
x=0
a
x0
x=0.
doub
lecos(d
oubl
e)
.
ra
d.do
uble
sin
(dou
ble)
.
ra
d.do
uble
tan(d
oubl
e)
pi
.
ra
d.do
uble
acos(d
oubl
e)
.
[1
:1]
,pi
[0:pi
]
rad.
doub
leasin
(dou
ble)
.
[1
:1]
,pi
[pi/2
:pi/2
]
rad.
doub
leatan(d
oubl
e)
pi
.
pi
[pi/2
:pi/2
]
rad.
doub
leatan2(
doub
lex,
doub
ley)
pi
arct
an(x/
y).
pi
.
pi
[pi
:pi
]
rad.
doub
lecosh(
doub
le)
pi
.
doub
lesin
h(do
uble
)pi
.
doub
letanh(
doub
le)
pi
pi
.
doub
leexp(d
oubl
e)
.do
uble
log(
doub
le)
.
pi
.do
uble
log1
0(do
uble
)
.
pi
.do
uble
modf
(dou
ble
d,do
uble
*p)
d.
*p.
doub
lefr
exp(
doub
led,
int
*p)
x
[0.5,1
)
y
d
=x
2y.
pi
x.
y
*p.
doub
lefm
od(d
oubl
ed,
doub
lem)
pi
pi
pi
d/m.
pi
pi
d.
doub
leld
exp(
doub
led,
int
i)d2
i .
int
abs
(int
)pi
.
o
verlo
aded
lo
ngint.
div_
tdi
v(in
tn,
int
d)
pi
pi
n/d
.pi
quot,rem
pi
pidiv_t.
ldiv
_tdi
v(lo
ngin
tn,
long
int
d)
pi
pi
n/d
.pi
quot,rem
pi
pildiv_t
.
4.
1:
.
-
70 4.
if (errno == EDOM)std::cerr
-
4.11. 71
6. pi ( )
n`m(r, , ) = Rn`(r)Y`m(, ) .
,
Y`m(, ) =
2` + 14pi
(` m)!(` + m)! P
m` (cos )eim .
pi Legendre, Pm` (x), pi ` = m
Pm` (x) = (1)m 1 3 5 (2m 1) (1 x2)m/2 ,
` = m + 1Pm` (x) = x(2m + 1)Pmm(x) ,
pipi pi
(` m)Pm` (x) = x(2` 1)Pm`1(x) (l + m 1)Pm`2(x) .
[0, pi] [0, 2pi) . pi 50 100 pipi pi- pi Y`m(, ). pi sin cos , sin sin , cos , Y`m(, )Y`m(, ) (, , x, y, z, ) , ` = 2, m = 0 (, pi d-).
7. C++ pi ( pi) - f (x) = 0 [xa, xb] pipi f (x). pi :
() 10. - pi pi , pi pi pi pi .
() 11. , pi pi pi , pi pi pi pi pi pi f (x). pi pi .
() Brent12. , pi pi pi pi pi , , . pi pi .
10http://mathworld.wolfram.com/Bisection.html11http://mathworld.wolfram.com/MethodofFalsePosition.html12http://mathworld.wolfram.com/BrentsMethod.html
-
72 4.
8. pi C++ pi pi pi . pi, pi pi pi3 3 , , N N, (pi.. x o) pi pi (, , N-) , , . pipi pi , pi pi. pi pi pi pipi. pi pipi pi pi pi pi. , pipi pi pi , , , , pi . pi pi pi pi
x|o|x-----
| |o-----
o|x|, pipi, pi pi ( ) pi pi.
9. pi C++ pi pi four-in-a-row pi . pi, pi pi pi M N. pi pi pi. pi pi , . pi , pi.
4.11.1
1. C++ pi pi . pi pi . pi, pi pi pi .
2. pi std::swap() std::min(), std::max() STL, 5.1.3.
3. pipi pi pi std::vector (pi ) , , pi-pi pi (
-
4.11. 73
Bubble sort
pi pi . O(n2) :1. pi pi ,
. pi pi , .
2. pi pi . - , pi pi , .
3. pi - pi pi .
, pi pi .
pi pi , pipi pi ,pi !
Insertion sort
pi pi. O(n2) ( pipi ) O(n). :
1. pi , pi.
2. pi , ,. . . pi pi (pi ), pi pi.
Quicksort
, pi , pi pi . - O(n2) ( pipi ) () O(n log n). pi pi pi , :
1. pi .
2. , , , pi pi pipi . pi . .
3. pi- pi pi- . ,pi.
-
74 4.
-
5
Standard Library
C++ , pi pi pi pipi, pi pi pi pipi . pi ( 6) pi (templates, 4.7, 6.3), pi Standard Library (STL).
STL :
containers, pi , . pi- pi pi pi- pi . picontainers pi pi (pi.. set, map) - (pi.. vector,deque) pipi pi (pi.. map).
iterators, container. iterators containers pi pi , pi . pi container pipi pi pi pipi .
pi pi pi pi pi pi , pi container pi pi pi. pi iterators.
pipi, STL pi pi (adapters) (function objects).
pi STL pi pi pi headers (pi.. / , - , , pi, ..pi.) pi . pi pi pi C, pi. pi pi STL.
, pi containers - pi pi .
75
-
76 5. STANDARD LIBRARY
5.1
5.1.1 (Pair)
STL pi containers pi pi pi pi pi. pi , header pi, , std::pair. - template pi pi T1,T2 . first second. (pi.. T1 int T2 double) pi pi pi :
std::pair p1; // p1 == (0, 0.0)std::pair p2(3, 2.0);
pi pair :
std::pair p(3, 2.0);
std::cout
-
5.1. 77
pi negate() pi1plus() pi1 + pi2minus() pi1 pi2multiplies() pi1 * pi2divides() pi1 / pi2modulus() pi1 % pi2equal_to() pi1 == pi2not_equal_to() pi1 != pi2less() pi1 < pi2greater() pi1 > pi2less_equal() pi1 = pi2logical_not() !pi1logical_and() pi1&&pi2logical_or() pi1||pi2
5.1: .
pi pi pipi pi (adapters), 5.2. .. plus() pi . pi- pipi pi , pi..constval pi pi std::bind1st() :std::bind1st(plus(), constval)
, pi pi ( pi) pi (!) pi .
pi bind1st(functor,value) functor(value,parameter)bind2nd(functor,value) functor(parameter,value)not1(functor) !functor(parameter)not2(functor) !functor(parameter1, parameter2)ptr_fun(function) function functor
5.2: .
pi pi ( pi pi pi) ptr_fun().
5.1.3 ,
header std::min(), std::max() std::swap() templates. :namespace std {// minimum of a, b
-
78 5. STANDARD LIBRARY
template T const & min(T const & a, T const & b);
// maximum of a, btemplate T const & max(T const & a, T const & b);
// b atemplate void swap(T& a, T& b);
}
pi pipi min/max - (
-
5.2. (CONTAINERS) 79
5.2 (containers)
5.2.1
containers pi pi pi pi. container pi , pi , , pi pi C, pi.
containers :
sequence containers pi - pi pipi. pi . .. container pi- , pi container pi . STL pi pi sequence containers: vector, deque list. pipi, string pi pi pi- pi containers pi pipi pi.
associative containers pi pi pi pi . STL pi pi associativecontainers: set, multiset, map multimap.
pi pi associative container containers . pi sequence containers .
containers pi class template (6.3). - container pi pi pi pi pi pi. map multimap pipi pi pi pi. associative containers pi pi- pi . pi pi pi pi- pi (true/false) pi pi . pi pi std::less (5.1.2) pi (
-
80 5. STANDARD LIBRARY
std::set c;
std::vector v;// use c, v ........
> v >>.
containers - , . pi, pi pi-, pi pi , pipi, pi pi .
container
pi pi , containers: cntr pipi pi container (vector, list, map,. . . ).
pi , pipi pi- template container (pi , , pi.).
cntr c1;
c1 cntr.
cntr c2;
// fill c2 ....
cntr c3(c2);
c2 cntr, ( pi pi) c3 c2, pi. c2, c3 pipi pi. pi pi pi template.
pi pi iterator. , pi.. beg, end iterators () container beg end, pi container ( pi pi), [beg,end):cntr c4;
// fill c4 ...
// set beg, end on c4
cntr c5(beg,end);// creates c5 by copying the elements of c4// from beg to (one before) end.
-
5.2. (CONTAINERS) 81
pi , T1, T2 pi pi pi pi T1 pi T2. pi.. T2double, pi T1int ( piint double) T1std::complex.
pipi pi containerspi pi iterators pi . pi pi.. vector pi pi -pi :
#include
double a[5] = {0.1, 0.2, 0.5, 0.3, 7.2};
std::vector v(a, a+5);
(4.3) pi pi pi n n . , a a[0] a+5 pi a[4].
pipi pipi, pi pi - pi , container.
containers
containers pi . pi pi 5.3. reverseiterator rbegin() pi pi reverse iterator rend() - container .
pi size() pi empty() true/false container
( size()==0 pi pi )max_size() pi
( pi pi)begin() iterator pi end() iterator rbegin() reverse iterator rend() reverse iterator pi pi
5.3: containers STL.
container (.) container ( ). pi.., pi vector pi pi pi pi:
void f(std::vector & c) {std::cout
-
82 5. STANDARD LIBRARY
pi container ==,!=, , = . container pi , . :
1. - . pi containers.
2. , container -.
3. containers .
pipi container
pipi pipi container :
pi container, pi:c1 = c2;
c1 c2. c1 pi c2. pi pi .
container pi pi - std::swap() :
std::swap(c1,c2);
swap(), pi, pi, pi :
c1.swap(c2);
- insert():c.insert(pos, elem);
elem pi (sequence containers) pi ( associative containers) pi iterator pos. associative containers pi pi , pi, pi pi pi pi . pi iterator . insert() .
:
erase():c.erase(beg,end);
-
5.2. (CONTAINERS) 83
pipi iterators - [beg,end) (pi, , ). c sequence container pi iterator pi associative containers pi pi.
clear(). container. pi void:
c.clear();
pi , container pi pipi- .
Iterators
pi pi pipi, pi iterators pi pi pi containers.
pi iterator pi pi pi . iterator pi pi pi pi, pi (*) iterator pi pi pi . , pi *it containerpi iterator it.
pointers iterators. , , iterator pi (&) . pi pi STL containers. pi, pi..it, pi iterator container (pi.. vector) :
std::vector::iterator it;
Iterator pi pi pi :
std::vector::const_iterator it;
pipi , it pi pipi pi const. pipi rbegin() rend() con-
tainer. pi (reverse) iterator. pi (pi pi pi) pi pi container pi containers. pi -pi pi iterator. iterator pi.. vector, :
std::vector v(10);
std::vector::reverse_iterator rit = v.rbegin();
pipi, pi pi const_reverse_iterator ite-rators pi pi pi .
iterators :
-
84 5. STANDARD LIBRARY
random () iterators, pi pi , : pi - ( 2.3), ++it pi it pi , pi iterator pi, random iterators pi container pi , . iterators vector deque .
bidirectional ( ) iterators pi- :
1. pi (==) (!=).
2. pi pi pi , pi-pi ++it --it (, , it++ it--). pi bidirectional iterator pi , pi . iterators list as-sociative containers .
pi , pi con-tainers, STL pi
void advance(Iterator it, Difference_type n);
pi n pi pi.1 iterator it random, - it += n;. bidirectional n ++it ( n>0) --it ( n
-
5.2. (CONTAINERS) 85
pi . pi pipi vector pi pi . pi pi pi pi vector pi pipi, , pi, , . pipi, , iterators pi pi .
pi, pi vector pi pi - .
std::vector pipi pi header .
vector pi pi pi . pi pi pi pi .
std::vector v;
vector.
std::vector v(N);
v vector N pi T. pi- T(), pi pi T. T pi pi 0 (2.2). std::vector v(N, elem);
v vector N elem. pi, , elem pi pi pi T.
std::vector v1(v2);
v1 v2.
std::vector v(beg,end);
v pi iteratorsbeg end.
vector pi - pi pi vector pipi size(), empty() max_size() pi pi :
-
86 5. STANDARD LIBRARY
capacity() pi pi pi pi pi pi vector , , - .
reserve() . pi pi vector . vector. , pi, pi N pi Tpi vector , pi std::vector v;v.reserve(N);
N push_back(), pi std::vector v(N);
v[0], v[1], . . . , v[N-1].
pi pi pipi container . pi- pi vector.
v1 = v2;
v2 v1 .
v.assign(N,elem);
v N elem -pi , , pi v.
v.assign(beg, end);
v container( pi) iterators beg pi end. pi pipi beg end container, pi pi pi pi v beg end.
v1.swap(v2);
-
5.2. (CONTAINERS) 87
std::swap(v1,v2);
v1, v2.
v.insert(pos, elem);
pi pi pi iterator pos elem pi iterator .
v.insert(pos, N, elem);
pi pi pi iterator pos N elem pi pi. pi pi pi pi-pi pi.
pi pi pi insert() iterators:
v.insert(pos, beg, end);
, pi pi iterator pos vector v iterators beg (pi), end (pi).
v.push_back(elem);
pi pi pi -pi elem pi vector. pi .
resize() pi . pi pi.
v.resize(N);
pi v N pi pi . pipi pi pi pi . , .
v.resize(N,elem);
elem.
-
88 5. STANDARD LIBRARY
vector :
resize() pi pi pipi. clear(). erase(). pi container
pi, pi piiteratorsc.erase(beg,end);
sequence containers, pi - pi pi iterator, pos:v.erase(pos);
pipi pi iterator pi.
push_back() - pop_back(), pi , :v.pop_back();
, iterators pi pipi.pipi, pi vector , , iterators.
pi
pi pi, vector :
([]) pi pi :std::vector v(3);
v[0] = 1.0;v[1] = 3.0;v[2] = v[1] + 5.0;
at() . pi-, , ,. . . vector v v.at[0], v.at[1],v.at[2],. . . . pi pi pi pipi pi [0:v.size()-1] -pi pi.2 pi pi pi pi pi .
2 pi pi at().
-
5.2. (CONTAINERS) 89
front() back(). pi pi , , pi .
(*) iterator. piconst_iterator pi pi .
:, pipi vector pi -
:#include #include #include
intmain() {
std::vector v(10);// v = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}
// assign valuesfor (std::size_t i = 0; i < v.size(); ++i)
v[i] = 4.0 * i*i;
std::vector v2(v);// v2 is a copy of v
// append more values to v2std::size_t const size = v2.size();for (std::size_t i = size; i < 2*size; ++i)
v2.push_back(4.0*i*i);
// print v2std::cout
-
90 5. STANDARD LIBRARY
pipi pi pi. , vector pi pipi , deque pi . pi , pi.
std::deque pipi pi header . deque pi
pi . pi pi pi pi- pi , vector pi pi pi . pipi, pipi pi , pi vector, . deque pi pi . pi, pi pi pi , - iterator pi , pi .
deque pipi pi vector. pi capacity() reserve() pi vector. pi pi ( pi) pipi pipi deque , iterators . pi ( iterators).
capacity() reserve(), pi vector pi pi deque. pipi, pi pi push_front() ( ) pop_front() ( pi ), pi push_back() pop_back().
: pi deque .
. pi iterator .
#include #include
intmain() {
std::deque d; // d is empty
for (int i = 0; i != 10; ++i)d.push_front(i);
// d is : {9, 8, ..., 0}
int & r = d.front();std::cout
-
5.2. (CONTAINERS) 91
-
92 5. STANDARD LIBRARY
list pi pi seque-nce containers. .
std::list c;: .
std::list c1(c2);: , .
std::list c(N);: N pi- .
std::list c(N, elem);: pi N elem.
std::list c(beg,end);: pi - [beg,end).
pi list pi pi- :
c1 = c2;: c2 c1 .
c.assign(N,elem);: c N - elem.
c.assign(beg,end);: c - iterators [beg,end).
c1.swap(c2);: c1, c2.
std::swap(c1,c2);: swap() pi .
c.insert(pos,elem);: pi pi iterator pos elem. pi iterator .
c.insert(pos,N,elem);: pi pi iterator posN elem. pi pi.
c.insert(pos,beg,end);: pi pi iteratorpos [beg,end). pi pi.
c.push_back(elem);: elem c.
c.push_front(elem);: elem c.
c.resize(N);: N pi c. , pi pi . pi pi.
c.resize(N,elem);: , pi pipi elem.
-
5.2. (CONTAINERS) 93
pi list c, :
c.pop_back();: . c.pop_front();: pi . c.erase(pos);: iterator pos pi-
iterator pi.
c.erase(beg,end);: [beg,end) pi iterator pi.
c.clear();: c. pi resize().
pi
pi list :
front() back(). pi pi , , pi.
(*) iterator. piconst_iterator pi pi .
pipi
list, pi containers, pi size(), empty() max_size() pi pi pi (5.2.1), pi pi- iterators, pi , pi capacity() reserve().
list pi pipi pi - sequence containers:
c.remove(val);
c val.
c.remove_if(func);
pi pi pi , true false. remove_if() list pi func() true.
unique() pi pi pi.
-
94 5. STANDARD LIBRARY
unique(func) pi func() pi true.
c1.splice(pos, c2);
pi iterator pos c2, pi c2. c1, c2 pipi list.
c1.splice(c1pos, c2, c2pos);
pi iterator c1pos c2 iteratorc2pos. c1, c2 pi .
c1.splice(c1pos, c2, c2beg, c2end);
pi iterator c1pos c2 [c2beg, c2end). c1, c2 pi .
sort() (
-
5.2. (CONTAINERS) 95
#include #include
inline boollessthan10(double a) {return a < 10.0;
}
int main() {std::list c; // creates empty list
for (int i = 0; i != 10; ++i)c.push_back(2.0 * i);
// c: {0.0, 2.0, 4.0, ..., 18.0}
c.remove(18.0);// any element with value equal to 18.0 is erased.
c.remove_if(lessthan10);// all elements with value less than 10 are erased.
std::cout
-
96 5. STANDARD LIBRARY
pi containers, pi , sequence containers - pi pi . (binary search) pi pi pi associative containers O(log n) - pi pipi sequence containers O(n).
std::set std::multiset pipi pi .
pi set pi T pi pi pi.3 5.2.1 pi- pipi:
std::set c;
set.
std::set c1(c2);
set .
std::set c(beg,end);
set pi pi container, pi - pi, iterators pi [beg,end).
pipi pi , std::less pi (
-
5.2. (CONTAINERS) 97
set pi :
c1 = c2;: c2 c1 .
c1.swap(c2);: c1, c2.
std::swap(c1,c2);: swap() pi .
c.insert(elem);: set multiset c elem. c multiset pi iterator . c set pi (pair, 5.1.1), pi pi iterator pi bool pi pi .
c.insert(pos,elem);: pi elem, - pi pi iterator pos, pi iterator pi .
c.insert(beg,end);: c [beg,end). pi pi.
pi set c pi :
c.erase(elem);: elem pi pi .
c.erase(pos);: pos. pi pi.
c.erase(beg,end);: iterators [beg,end). pi pi.
c.clear();: c.
pi
pi pi set pi pi . pi pipi . , pi- pi pipi . iterator pi pi .
pipi pi pipi pi pipi pi .
-
98 5. STANDARD LIBRARY
pipi
set multiset, pi containers, pi size(), empty() max_size() pi pi pi (5.2.1),pi pi pi iterators. pi- , pi pi - pi pi pi pi pi . :
count(elem): pi pi elem. find(elem): pi iterator elem ,
pi, end().
lower_bound(elem): pi pi pi pi elem.
upper_bound(elem): pi pi pi pi elem.
equal_range(elem): pi, , iterators pi pi- pi elem.
:
#include #include #include
intmain() {
typedef std::set Set;
// define empty set.Set c;
// insert values in random order.
c.insert(5);c.insert(12);c.insert(3);c.insert(6);c.insert(7);c.insert(1);c.insert(9);
// print setstd::cout
-
5.2. (CONTAINERS) 99
// remove elements with value 4, 6 and print informationint howmany = c.erase(4);std::cout
-
100 5. STANDARD LIBRARY
pi.4
std::map c;
map.
std::map c1(c2);
map , pi.
std::map c(beg,end);
map pi pi map, pi - pi, iterators pi [beg,end).
pipi pi -, std::less pi (
-
5.2. (CONTAINERS) 101
pi map c pi :
c.erase(elem);: elem pi pi .
c.erase(pos);: pos. pi pi.
c.erase(beg,end);: iterators [beg,end). pi pi.
c.clear();: c.
pi
pi pi map pi pi . pi pi-pi . , pi pipi pi.
pi iterator. it iterator map (*it).first (, , it->first) (*it).second (, , it->second) pi.
pipi pi pipi pi - pipi pi .
map (, multimap) pi set pi pi pi ( []) pi pi. , pi, pi pi pi pi . :
c map pi pi key c[key] .
c map pi pi key c[key] = value;
c make_pair(key,value). , , -pi pipi , pi..
std::cout
-
102 5. STANDARD LIBRARY
#include #include #include #include
intmain() {
typedef std::map Map;
Map birthyear; // Empty map.
// insert a few pairs.birthyear.insert(std::make_pair("John", 1940));birthyear.insert(std::make_pair("Paul", 1942));birthyear.insert(std::make_pair("George", 1943));
std::cout
-
5.3. (ALGORITHMS) 103
5.3 (algorithms)
STL pi pi pi pipi . pi , - pi : pipi , , , , pi.
pi containers. pi pi pi pi iterators , pi, -, containers pi pi pi . , pi: - container , pi , pipi pi . pipi - containers pi: pi , pi.. , pi random iterators (5.2.1). pi pi pi containers. pipi pi pi pi .
pi pi header . pi pi pi . std.
pi iterators pi - container pi . pipi pi iterator pi , pi, . pi pi pi iterator pi pi . pi pi container. pipi pi iterator pi pipi container . pipi, - pi pi pipi pi pi , ( pi - pi UnaryFunctor) ( pi BinaryFunctor).
pi pi :
accumulate()
Type accumulate(Iterator beg, Iterator end, Type value)
Type accumulate(Iterator beg, Iterator end, Type value,BinaryFunctor op)
pi pi [beg,end) value. {a1, a2, a3, . . . } pi
value + a1 + a2 + a3 + ...
pipi pi pi.
.
:
-
104 5. STANDARD LIBRARY
std::vector v pi pi- :
double sum = 0.0;for (std::size_t i = 0; i < v.size(); ++i)
sum += v[i];
accumulate, pipi pipi
sum = std::accumulate(v.begin(), v.end(), 0.0);
inner_product()
Typeinner_product(Iterator beg1, Iterator end1,
Iterator beg2, Type value)
Typeinner_product(Iterator beg1, Iterator end1,
Iterator beg2, Type value,BinaryFunctor op1, BinaryFunctor op2)
pi pi value - [beg1,end1) beg2. {a1, a2, a3, . . . } {b1, b2, b3, . . . } pi
value + a1 * b1 + a2 * b2 + a3 * b3 + ...
pi pipi , op1(), op2(). pi
value op1 (a1 op2 b1) op1 (a2 op2 b2) op1 (a3 op2 b3) + ...
.
for_each()
UnaryFunctorfor_each(Iterator beg, Iterator end, Unaryfunctor op)
op() [beg,end). pi op(). pi op() (pi pi pipi).
count()
Difference_typecount(Iterator beg, Iterator end, Type const & value)
Difference_typecount_if(Iterator beg, Iterator end, UnaryFunctor op)
-
5.3. (ALGORITHMS) 105
pi pi [beg,end) pi value. associative containers pi .
pi pi op() pi true.
pi Difference_type .1
min_element()
Iteratormin_element(Iterator beg, Iterator end)
Iteratormin_element(Iterator beg, Iterator end, BinaryFunctor op)
pi iterator ( pi pi ) [beg,end). pi (
-
106 5. STANDARD LIBRARY
equal()
boolequal(Iterator beg1, Iterator end1, Iterator beg2)
boolequal(Iterator beg1, Iterator end1, Iterator beg2,
BinaryFunctor op)
pi pi true false [beg1,end1) pi pi beg2.
op(), pi pi .
copy()
Iteratorcopy(Iterator beg1, Iterator end1, Iterator beg2)
[beg1, end1) pi beg2. pi iterator pi pi pi .
beg2 pi container pipi [beg1, end1).
copy_backward()
Iteratorcopy_backward(Iterator beg1, Iterator end1, Iterator end2)
[beg1, end1) pi - end2, pi . pi iterator pi pi pi .
end2 pi container pipi [beg1, end1).
transform()
Iteratortransform(Iterator beg1, Iterator end1, Iterator beg2,
UnaryFunctor op)
Iteratortransform(Iterator beg1, Iterator end1, Iterator beg2,
Iterator beg3,BinaryFunctor op)
pi op() [beg1,end1) pi pi beg2. beg1, beg2 pi .
op() [beg1,end1) pi
-
5.3. (ALGORITHMS) 107
beg2 pi pi beg3. beg1, beg2, beg3 pi .
pi iterator pi pi - pi .
fill()
voidfill(Iterator beg, Iterator end, Type const & value)
voidfill_n(Iterator beg, Size N, Type const & value)
pi value [beg,end). value N pi beg.
generate()
voidgenerate(Iterator beg, Iterator end, Functor op)
voidgenerate_n(Iterator beg, Size N, Functor op)
pi pi op() ( pi ) [beg,end). pi op() N - pi beg.
replace()
voidreplace(Iterator beg, Iterator end,
Type const & oldvalue, Type const & newvalue)
voidreplace_if(Iterator beg, Iterator end,
UnaryFunctor op, Type const & newvalue)
pi newvalue [beg,end) pi oldvalue. pi - pi op pi true.
replace_copy()
voidreplace_copy(Iterator beg1, Iterator end1, Iterator beg2,
Type const & oldvalue, Type const & newvalue)
voidreplace_copy_if(Iterator beg1, Iterator end1, Iterator beg2,
UnaryFunctor op, Type const & newvalue)
-
108 5. STANDARD LIBRARY
pi [beg1,end1) pi beg2 pi newvalue oldvalue. pi pi op pi true.
remove()Iteratorremove(Iterator beg, Iterator end, Type const & value)
Iteratorremove_if(Iterator beg, Iterator end, UnaryFunctor op)
pi [beg,end) value. pi pi op pi true. pi pi .
pi iterator pi - pi . pi, pi beg piiterator pi .
, pi pi associative containers. pi pi (erase()).
list pi (remove()) pi -.
reverse()voidreverse(Iterator beg, Iterator end)
[beg,end). list pi .
reverse_copy()Iteratorreverse(Iterator beg1, Iterator end1, Iterator beg2)
[beg1,end1) pi beg2. pi pi container.
merge()Iteratormerge(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2, Iterator beg3)
Iteratormerge(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2, Iterator beg3,BinaryFunctor op)
-
5.3. (ALGORITHMS) 109
pi [beg1,end1) [beg2,end2) pi beg3, pi . pi op() pi true false pi pi .
pi pi container.
list pi .
set_union()Iteratorset_union(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2, Iterator beg3)
Iteratorset_union(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2, Iterator beg3,BinaryFunctor op)
merge() pi . pi pi, pi .
set_intersection()Iteratorset_intersection(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2,Iterator beg3)
Iteratorset_intersection(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2,Iterator beg3, BinaryFunctor op)
merge() - .
set_difference()Iteratorset_difference(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2,Iterator beg3)
Iteratorset_difference(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2,Iterator beg3, BinaryFunctor op)
merge() - pi pi pi .
-
110 5. STANDARD LIBRARY
set_symmetric_difference()
Iteratorset_symmetric_difference(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2,Iterator beg3)
Iteratorset_symmetric_difference(Iterator beg1, Iterator end1,
Iterator beg2, Iterator end2,Iterator beg3, BinaryFunctor op)
merge() - pi pi .
binary_search()
boolbinary_search(Iterator beg, Iterator end, Type const & value)
boolbinary_search(Iterator beg, Iterator end, Type const & value,
BinaryFunctor op)
pi pi true false - [beg,end) pi value.
, op(), pi - pi , pi pi .
sort()
voidsort(RandomIterator beg, RandomIterator end)
voidsort(RandomIterator beg, RandomIterator end,
BinaryFunctor op)
[beg,end). pi, (
-
5.4. 111
voidstable_sort(RandomIterator beg, RandomIterator end,
BinaryFunctor op)
sort() .
partial_sort()
voidpartial_sort(RandomIterator beg, RandomIterator sortEnd,
RandomIterator end)
voidpartial_sort(RandomIterator beg, RandomIterator sortEnd,
RandomIterator end, BinaryFunctor op)
sort() pi [beg,sortEnd) .
random_shuffle()
voidrandom_shuffle(RandomIterator beg, RandomIterator end)
pi [beg,end). pi random iterators pi pi
list associative containers.
5.4
1. 1000 .
() pi pi pi -. pi container(pi pi pi) pi .
() (pi clock()5 pi ). pi;
() pi pi .
() pi .() pi pi pi 0.() pi 0.() pi pi pi .
2. pi pi list: unique(), splice(), merge(), reverse().
5 Unix man 3 clock .
-
112 5. STANDARD LIBRARY
3. pi pi STL. - . pi;
4. pi . pi pipi ( ) ( pi, , pipi pi).
5. pi : pi , pi, ( ), -, pi, pipi. pi pi , pi pi .
-
6
6.1
pi pi pi C++ pi pi (object based) pi pi (object orientedprogramming). , , pi, pi,pi pi pi pi pi pi pi pi pi.
pi pi pi pi pi-, pipi pi, pi , pi pi pi, pi. , pi-, (pi pi , pi , , ,pi.), pi (pi pi , -, , , pi.), pi pi . pi ( pi ) -pi pi pi pi pi pi . .. C++
std::size_t const N = 50; // number of studentsstd::string studentName[N];int studentAM[N];int studentYear[N];// .......
std::size_t const M = 500; // number of booksstd::string bookTitle[M];std::string bookAythor[M];int bookYear[M];// .......
pi pipi pi ( ) pi pi, pipi , pi pi pi
113
-
114 6.
pi . - pi pi , compiler pi . pi pipi pi ( , , pi. , , pi , -, , pi.) , , , , pi. , pi, pipi , pi pi pi pi pi pi.
, pi pi pi pi- pi pi pi -. pi pi pi pi: pi, - pi pi ! pi pi pi C++ struct, 2.6.2, pi struct Student {
std::string name;int AM;int Year;
// ......};
struct Book {std::string title;std::string author;int year;
// ......};
pi -pi pi pi pi, - pi pi . pi pi :std::size_t const N = 50;std::size_t const M = 500;
Student students[N];Book books[M];
pi : , - , pi pi pi (pi.. pi ) pi Student pi pi Book.
int printStudent(Student const & s);int printBook(Book const & c);
, pi, pi . pi - pi,
-
6.1. 115
pi pi pi pi pi . pi..,pi pi , pi ( pi ) (,pi, pi) pi , pi-pi , pi pipi . pi pi pi pi- pi pi pi pi - . C++ pi pi (constructor), pi- pi.
pi pi pi pipi pi pipi pi . pi pi pipi pi pi , pipi pi pi pipi pi - pipi pi ( pi , pi pi pi, pi.). pi pi , pi pipipi . pi pipi pi pi (encap-sulation).
C++ pi struct pi pi C pipi pi . pipi, class struct , pi : pi , , .1 pi pi pipi pi pi pipiclass Student {
std::string name;int AM;int Year;
// ......
public:int print() {....}// former int printStudent(Student const & s);std::string getName() {....}int getAM() {....}int getYear() {....}
// ......};
class Book {
1 struct pi pi pi .
-
116 6.
public:int print() {....} // former int printBook(Book const & c);std::string getTitle() {....}std::string getAuthor() {....}int getYear() {....}
// ......
private:std::string title;std::string author;int year;
// ......};
pi . ( , pi ) printStudent() printBook() pipi ( pi ) pi ( pi - pi ). struct pi (.). . , print() pi pi Student :Student s;s.print();
pi s print() pi- pi . , public: pi ( pi ) pipi ( pi ) pi pipi pi . , pi { pi private: pi pi pi .
pipi, pi pi pi pipi pi , pi pi pi . pi ( pi ) , pi..class Student {
std::string name;// ......public:
std::string getName() {return name;}// ......};
pi pi - pi C++ pi pi .
pi pi pi pi- pipi pipi pipi pi pi ,
-
6.2. 117
pipi, , , . pi . pi, , pi pi, , pi pi pi . pi pi pi pipi pi pi- .
pi pi pi pi - pipi pi pi pi pi . pi,pi, pi ,, pipi, (, inheritance) pi, pi, pi pi pi . pi pi , pi, pipi pipi pi pi pi . pi , pi pi , pi ( -), , pipi, pi pi- pi . pi pi pi pi , , , pi - pi , pi pi . pi (polymorphism).
pi , pi pi pi- pi - pi pi. pi - pi , pi pi pi pi . pi - , pi ( pi pi pi ) pi pi pi . pi pi- pi pi C++ pi pipipi.
6.2
pi, pi pipi, Student pi .
class Student {public:
Student(std::string const & onoma, int am, int y): name(onoma), AM(am), Year(y) {}
Student() {}Student(Student const & other);
Student & operator=(Student const &other);
-
118 6.
int print() const {std::cout
-
6.2. 119
s Student, pi
Student & s1 = s;Student const & s2 = s;
s1.setYear(2000); // corrects2.setYear(2000); // error
setYear() s1 pi s2 pi-pi.
pi , , const pi, pi pi pipipi const.
pi pi (Student(), Student(), operator=()) pi .
pi pi pi , pi pi pi pi , private pi, , public .pi , ( pi) (, , public) pi . pi , pi . pi, Student pi print() setYear() pi :
class Student {public:// ............
int print() const;void setYear(int y);
// ............private:
std::string name;int AM;int Year;
};
intStudent::print() const {
std::cout
-
120 6.
pi pipi pi pi ( Student::). pi inline, 4.8 , pipi pi inline .
, , pipi header (pi.. Stu-dent.h) pi ( inline, 4.8) (pi.. Student.cc) pi . -, pi pi pi ( #include "Student.h") header pi pi - .
6.2.1 Constructor
6.2.2 Destructor
6.2.3 Copy constructor, assignment operator
6.2.4 Other operators, overloading
6.3 template
-
pi. . . pi!
pi pi, , pi Cpi . C++ pi pipi pi pi . - pi 1. pi
Raymond Cheong 2001, .1. pi - ( ).
Michael Savastio 1995, .2. pi pi- 429539.
Ken Huffman 1996, .3. pi Braille .
#include int l;int main(int o,char **O,int I){char c,*D=O[1];if(o>0){for(l=0;D[l ];D[l++]-=10){D [l++]-=120;D[l]-=110;while (!main(0,O,l))D[l]+= 20; putchar((D[l]+1032)/20 ) ;}putchar(10);}else{c=o+ (D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;D[I]+=I
-
122 . . . . !
#include
#define l11l 0xFFFF#define ll1 for#define ll111 if#define l1l1 unsigned#define l111 struct#define lll11 short#define ll11l long#define ll1ll putchar#define l1l1l(l) l=malloc(sizeof(l111 llll1));l->lll1l=1-1;l->ll1l1=1-1;#define l1ll1 *lllll++=l1ll%10000;l1ll/=10000;#define l1lll ll111(!l1->lll1l){l1l1l(l1->lll1l);l1->lll1l->ll1l1=l1;}\ll