sysprog 9

19

Click here to load reader

Upload: ahmed-mekkawy

Post on 03-Jul-2015

806 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Sysprog 9

C/C++ For Linux

Session 9C++ - Session 4

Page 2: Sysprog 9

Outline

● Templates● STL session 1

– Containers and iterators

Page 3: Sysprog 9

The Problem

● Decoupling type-independent and type-dependent data– Consider containers

● Generic programming– Consider algorithms

● Still preserve safe typing– As opposed to void *

Page 4: Sysprog 9

Templates

● Syntax● Parameters● Specialization● Function Templates

Page 5: Sysprog 9

Template Specialization

● Order: More -> Less● Compile time● Default parameters● GNU

– Include– Compilation Performance

● Readability– Code

– Compiler messages

Page 6: Sysprog 9

Type ID

● reinterpret_cast: bitwise● static_cast: some relation● const_cast: remove const● dynamic_cast: dynamic data

– Better type checking– More expensive

● typeid operator– type_info::name()

Page 7: Sysprog 9

Standard Template Library

● Containers & Iterators● Algorithms & Functionals● Strings & Streams● std namespace● STL Manual: http://www.sgi.com/tech/stl/

Page 8: Sysprog 9

Containers

● Holds other objects● Design Problem:

– Generic types held (don't care element)

– Some commonality in iface (don't care container)● Iterating● Algorithms

– Some specifics in iface– Efficiency

Page 9: Sysprog 9

STL Solution

● Templates for generic types● Iterators to decouple iteration● Adapters for interface adjustments● Functors to decouple algorithm operations from

obj/contner code.

Page 10: Sysprog 9

Iterators

● Points to position of element● Operators for element access

– “Dereference” *

– Access ->

– Move positions ++, --

– Equality ==

– Assignment =

Page 11: Sysprog 9

Functors

● Function object● Binary and unary functors● Predicates● Adapters● Algorithms

Page 12: Sysprog 9

Common Container Interface

● iterator, const_iterator, reverse_iterator● begin(), end(), rbegin(), rend()● push_back(), back(), pop_back()● insert, erase, clear● size(), empty()● Template Parameters

– Element Type, Allocator

Page 13: Sysprog 9

Vector

● Fast access, expensive resize● Access: [], at()● reserve()/resize()● max_size()● Ctors: range, size

Page 14: Sysprog 9

List

● Expensive access, quick resize● push_front(), front(), pop_front● splice(), merge(), sort()

Page 15: Sysprog 9

Deque

● Double ended queue● Front methods from list● Also parameterized by compare● [] from vector

Page 16: Sysprog 9

Sequence Adapters

● Parameterized by Container● queue● priority_queue● stack

Page 17: Sysprog 9

Associative Containers

● Unique– Pair, map, hash_map, set

● Multiple– Multimap, multiset, hash_multimap

Page 18: Sysprog 9

Map/Multimap

● <Key, Value, Allocator, Cmp>● [“key”], find● Pairs● lower_bound● upper_bound● equal_range

Page 19: Sysprog 9

Additional

● set/multiset: – always sorted

– No Value

● hash_map/hash_multimap– Hash parameter