Professional Documents
Culture Documents
1.
2.
3.
4.
5.
STL
Iterators Traits
Containers
Generic Algorithms Function Objects
Adaptors
2000.02
2000.03
2000.04
2000.05
2000.06
OOObject Oriented
OO
Generic Programming
--
container container
classes data members container classes member
functionscoupling
interoperability
OO OO
C++ template
template
int main()
{
// int mymin(int, int);
cout << mymin(10, 20) << endl; // 10
// double mymin(double, double);
cout << mymin(30.0, 20.0) << endl; // 20
rect r1(3,5), r2(5,7);
// rect mymin(rect, rect);
cout << mymin(r1, r2) << endl; // (3,5)
}
class template
template <typename Type>
class Queue {
public:
Queue() { /* ... */ };
~Queue() { /* ... */ };
Type& remove();
void add( const Type & );
bool is_empty();
bool is_full();
private:
// ....
};
STL
STLSTL
C++ template :)
GenericGenericityObject OrientedSTLStandard
Template Library MFCMicrosoft Foundation Classes
STL
STL components
MFC VCL Windows
STL STL Generic Paradigm
requirements concepts
models refinementsAlexander
StepanovSTL
STL concepts
classes
iterators adaptors function objects
adaptable
STL STL
STL STL STL
STL 1
STL Alexander Stepanov 1979 Bjarne Stroustrup C++
David R. Musser 1971
AdaAlex Musser
1987 Ada library Ada C++
C++ template Alex
C/C++
component library
Alex AT&T Hewlett-Packard Palo Alto
C C++ 1992 Meng Lee Alex
Bell Andrew Koenig 1993 Alex 11
ANSI/ISO C++ Alex
Waterloo C++ Standard
C++ STL
Microsoft VC6P.J. Plauger
Inprise C++Builder4Rogue Wave Software, Inc.
GNU C++ egcs-2.91.57Silicon Graphics Computer Systems, Inc
STL
http://www.sgi.com/Technology/STL/
http://www.stlport.org/
STL
STL
STL
STL
STL
STL
STL C++ template
STL
code
STL
STL components
1. containers vector, list,deque, set, map
2. algorithms sort, search,copy, eraseSTL 70
3. iterator containers algorithms
iterator STL containers
algorithms
4. function object "call operator"
classesC/C++ function objectSTL 15
function objects
STL STL
STL Concepts Modeling Refinement
traits STL
STL
STL
STL STL
STL
STL
1815 waterloo in Belgium C++ 1994
waterloo in Ontario, USA C++
STL
STL
\ STL
STL
----------------------------------algorithms
<algorithm>
<numeric> 2
vector
<vector>
list
<list>
deque
<deque>
stack
<stack>
queue
<queue>
priority queue
<queue>
map
<map>
set
<set>
multimap
<map>
multiset
<set>
function objects
<functional>
iterator adaptor
<iterator>
2accumulate(), adjacent_difference(),
partial_sum(), inner_product().
int ia[] = { 1, 3, 2, 4 };
containers containers
container
container iterator
int C++ iterator
C++ Standard Inprise C++Builder 4.0
map /
map<string, int> simap; //
simap[string("1")] = ia[0];
simap[string("2")] = ia[1];
simap[string("3")] = ia[2];
string int
// ("1", 1)
// ("2", 3)
// ("3", 2)
// 4 2 3 1
// 1 3 2 4
// 4 3 2 1
stackqueuepriority queue
set
map map /key/value
first second
10
vector<int>::const_iterator citer;
list<string> iterator
list<string>::iterator iter;
list<string>::const_iterator citer;
// 24
STL
STL
list list
list < list <string> > mylist;
// function template
11
//
void main()
{
int ia[7] = {0,1,2,3,4,5,6};
list<int> ilist(ia, ia+7);
// list
for_each(ilist.begin(), ilist.end(), pfi); // 0 1 2 3 4 5 6
ilist.push_back(7);
ilist.push_back(0);
ilist.push_back(7);
ilist.push_back(9);
for_each(ilist.begin(), ilist.end(), pfi); // 0 1 2 3 4 5 6 7 0 7 9
ilist.remove_if(bind2nd(modulus<int>(), 2)); //
for_each(ilist.begin(), ilist.end(), pfi); // 0 2 4 6 0
}
12
// iterators
// string
// end-of-stream
// cout string " "
istream_iterator< string > ins( infile ), eos;
ostream_iterator< string > outs( cout, " " );
copy( ins, eos, outs ); // copy
}
stream iterator
STL
concept, model refinement, range
predicate, iterator, adaptor
STL
[Austern99]
concept, model
conceptrequirementsconcept class
template C++
concept C++ concept concepts
STL
conecpt modelconcept
type T concept C model T C
concept types concept Input Iterator char*, int*, float*
wrap classes type T concept C model T
C
concepts algorithms
formal template arguments
STL concepts
13
X x(y)
x = y
tmp = y, x = tmp
type T
T t;
x!=y
x > y
14
refinements
concept C2 concept C1 C2 C1
refinement
Modeling refinement concepts types
range
15