Generic programming starts with algorithms - PowerPoint PPT Presentation

About This Presentation
Title:

Generic programming starts with algorithms

Description:

Lift. Minimal requirements: works with maximal family of types ... Lift. Maintain usefulness of the algorithm make efficiency part of the requirements ... – PowerPoint PPT presentation

Number of Views:27
Avg rating:3.0/5.0
Slides: 25
Provided by: csR4
Learn more at: http://www.cs.rpi.edu
Category:

less

Transcript and Presenter's Notes

Title: Generic programming starts with algorithms


1
Generic programming starts with algorithms
2
Minimal requirements works with maximal family
of types
A
Generic algorithm
m
Lift
. . .
Remove an unneeded requirement on the type
Lift
Less specialized works with more than one type
A
1
Lift
A
Start here
Concrete algorithm requires specific data type
0
3
Maximal with respect to what?
4
Maintain usefulness of the algorithm make
efficiency part of the requirements
A
Generic algorithm
m
Lift
. . .
Lift
A
1
Lift
A
Concrete algorithm
0
5

A Concrete Algorithm
float max_element(float a, int
N) if (N 0) throw MaxElementEmptyArra
yError int first 0 float max a0
while (first lt N) if (max lt afirst)
max afirst return max
6

A More Useful Interface
int max_element(float a, int
first, int last) if (first last)
return first int result first while
(first ! last) if (aresult lt afirst)
result first return result
7

A Linked-List Counterpart
float_list_node max_element(float_list_node
first, float_list_node last) if
(first last) return first
float_list_node result first while
(first-gtnext ! last) if (result-gtdata lt
first-gtdata) result first return
result
8

Back to the Array Version
int max_element(float a, int
first, int last) if (first last)
return first int result first while
(first ! last) if (aresult lt afirst)
result first return result
9

Generalize the Element Type
template lttypename Egtint max_element(E a,
int first, int last) if (first
last) return first int result first
while (first ! last) if (aresult lt
afirst) result first return result
10

From Array Indexing to Pointers
template lttypename TgtTmax_element(T first,
T last) if (first last)
return first T result first while
(first ! last) if (result lt first)
result first return result
11

Generalize from Pointers to Iterators
template lttypename ForwardIteratorgtForwardIterat
or max_element(ForwardIterator first,
ForwardIterator last) if (first last)
return first ForwardIterator result
first while (first ! last) if (result
lt first) result first return result
12

Use with any Container with appropriate iterators
int a 6, 3, 7, 5int ai
max_element(a, a4)vectorltintgt v(a,
a4)vectorltintgtiterator vi
max_element(v.begin(), v.end())listltintgt x(a,
a4) listltintgtiterator li
max_element(x.begin(), x.end()). . .
13
Generic algorithm on
max_element
i
Forward Container Concept
i
ij
k jj 3k 7
j
k
j
k
7
3
3
7
max_element
max_element
14
What is a concept?
15
Intension
Extension
Abstraction 1 Abstraction 2 . . . Abstraction
K . . .
Requirement 1 Requirement 2 . . . . Requirement N
Concept
16
Intension
Extension
Abstraction 1 Abstraction 2 . . . Abstraction
K . . .
Requirement 1 Requirement 2 . . . . Requirement N
An abstraction is in the Extension if and only if
it satisfies all of the requirements in the
Intension
17
Intension
Extension
Closed plane figure N sides (for any N)
. . .
Example Polygon Concept
18
Intension
Extension
Must be a type whose objects can store other
objects (elements) Must have an associated
iterator type that can be used to traverse
through the elements.
vectorltTgt, for any T dequeltTgt for any T listltTgt
for any T slistltTgt for any T setltTgt for any
T mapltTgt for any T
. . .
Example Container Concept
19
A
C
Algorithm A works with every type T in concept C
Definition an algorithm is generic if it works
with every type in a concept
works is correct and efficient
20
STL Container Concepts
Container
?Back
21
STL Generic Algorithms on Forward Containers
Requires input iterators
Enables generic algorithms copy, for_each,
equal, transform,
?Back
Container
Requiresforward iterators

ForwardContainer
Enables find, merge, fill, replace, generate,
remove, unique, rotate,
Requiresbidirectional iterators
Enables reverse, partition, inplace_merge,
Sequence
ReversibleContainer
Front InsertionSequence
BackInsertionSequence
Requiresrandom access iterators
Enables sort, binary_search, random_shuffle,
Random AccessContainer
Front BackInsertionSequence
Vector
Slist
List
Deque
22
?Back
STL Concepts
Container
Iterator
Algorithm
Functor
Adaptor
ForwardContainer
AssociativeContainer
Input Iterator
Output Iterator
Input Algorithm
Output Algorithm
Unary Functor
BinaryFunctor
Iterator Adaptor
Forward Iterator
Forward Algorithm
BinaryPredicate
Bidirectional Iterator
Bidirectional Algorithm
OrderRelation
Random Access Iterator
Random Access Algorithm
23
New Concepts in the Boost Graph Library
?Back
STL Concepts
Container
Iterator
Algorithm
Functor
Adaptor
See also http//www.boost.org/libs/graph/doc
24
Generic Libraries Designed and Developed Viathe
Concept-Based Approach
  • Standard Template Library (HP, RPI, SGI)
  • Matrix Template Library (Indiana U.)
  • Boost Graph Library (Indiana U.)
  • Parallel Boost Graph Library (D. Gregor RPI
    PhD, Indiana U.)
  • Boost Array Library (N. Josuttis)
  • Boost Multi-Array Library (Indiana U.)
  • Boost Basic Linear Algebra Library (J. Walter, M.
    Koch)
  • Boost Property Map Library (Indiana U.)
  • Boost Random Number Generator Library (J. Mauer)
  • Boost Threads Library (W. Kempf)
  • Boost Concept Checking Library (Indiana U.)
  • Computational Geometry Algorithms Library (H.
    Bronnimann, S. Schirra, R. Veltkamp, )
Write a Comment
User Comments (0)
About PowerShow.com