Data Structures: CSCI 362 – Overview of STL Container Classes

advertisement
Data Structures: CSCI 362 – Overview of STL Container Classes
Overview of Containers

Standard Template Language (STL) organizes its classes into 3 categories

Sequence Containers
 Arrays and Vectors (provides index access to data)
 List/ sequence
 Deque (can move either end, but not middle)

Adapter Containers
 Stacks (last in, first out)
 Queue (first in, first out)
 Priority Queue (deletion returns the largest/smallest value

Associative Containers
 Set and Multiset/ bag (elements are the information – ordering is by content)
 Map/ Multimap (key-data relationship; associative pairs)

All the container classes are templated and what the container does and
how it works is independent of elements it contains
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
What are Containers?

A Container is a data structure whose main purpose is to store and retrieve
a large number of values

Containers are abstract data types (ADTs) that hold values. They don't
change the content – only hold it so that it can be retrieved later.

These data structure permits storage and retrieval of data items
independent of content. The two fundamental operations of any container
are:
 Put(C,x): Insert a new data item x into the container C.
 Get(C): Retrieve the next item from the container C.
Different types of containers support different retrieval orders, based on insertion
order or position.

Items in Containers are referred to by special objects called: iterators.
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
What are Containers?

The STL consists of 10 container classes categorized according to the
ordering of the elements and the different types of operations that access
the data
 Sequence Containers: store data by position in linear order, 1st, 2nd, 3rd, etc.
 Associative Containers: store elements by key e.g. name, ssn, part numbers
etc. A program accesses an element in an associative container by its key,
which may bear no relationship to the location of the element in the container
 Adaptor Containers: contain other containers as their underlying storage
structure.
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Containers
Sequence Containers
Adapter Containers
Associative Containers
Vector
Stack
Set, Multiset
Deque
Queue
Map, Mutltimap
List
Priority Queue
Trees
Hash
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Sequence Containers – Vector

We talked about this already??

A vector is a generalized array that
stores a collection of elements of the
same data type

Similar to an array – a vector allows
access to its elements by using an
index in the range from 0 to n-1, where
n is the size of the vector

Unlike an array – a vector has
operations that allow collection of the
elements to grow dynamically at the
rear of the sequence to meet the
runtime needs of an application

vector v (with 5 elements)
7
4 9
3
1
v.resize (8); (grow to 8 elements)
7
4
9
3
1
0
0
0
v.resize (3); (shrink to 3 elements)
7
4
9
What is the disadvantage of insertion
or deletion within the interior of the
sequence??
Allows direct access to its elements
through the index
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Sequence Containers - Lists


A list is a data structure that stores elements by position
Each item in the list has both a value and a memory address (pointer) that identifies
the next item in the sequence
Value 1
Pointer to V2

Value n
Disadvantage: unlike a vector, a list is not a direct-access structure


Value 2
Pointer to V3
In order to access a specific data value in the list, it is necessary to search from position 1
and follow the pointers from element to element until the data value is located
Advantage: unlike a vector, a list is able to add a remove items efficiently at any
position in the sequence

Insertion requires 2 updates – ideal for applications that require sequential access to data
while also requiring frequent insertion and deletion of elements
3
front
Dr. Nazli Mollah
Inserting
Before
into a List ContainerAfter
6
3
12
4
front
12

6
4
lecture notes 15
adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Associative Containers – Stacks & Queues

Associative containers store elements by key – in what application is this useful??

Ex: name, social security number, or part number.

A program accesses an element in an associative container by its key, which may
bear no relationship to the location of the element in the container.

Containers are typically most useful when they will contain only a limited number of
items and when the retrieval order is predefined or irrelevant. The most popular type
of containers are:

Stacks: Supports retrieval in last in, first out order (LIFO). Stacks are simple to
implement, and very efficient. Indeed, stacks are probably the right container to use
when the retrieval order doesn't matter at all, as when processing batch jobs. The put
and get operations for stacks are usually called push and pop.

Queues: Supports retrieval in first in, first out order (FIFO). FIFO may seem the
fairest way to control waiting times. However, for many applications, data items have
infinite patience. Queues are trickier to implement than stacks and are appropriate
only for applications (like certain simulations) where the order is important. The put
and get operations for queues are usually called enqueue and dequeue.

Stacks ad Queues cab ve implemented using either arrays or linked lists
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Associative Containers – Stacks & Queues

Both stacks and queues are storage containers that restrict how elements
enter and leave a sequence
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Stack Containers
A stack allows access at only one end of the sequence, called the top
C
C
A
Push A
Dr. Nazli Mollah
top
B
A
Push B
(a)
top
top
Push C
B
A
B
A
Pop C
B
top
A
top
Pop B
(b)
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Queue Containers
A queue is a container that allows access only at the
front and rear of the sequence.
A
B
C
Insert
Dr. Nazli Mollah
B
D
E
A
rear
front
C
D
Delete
lecture notes adapted from
Data Structures with C++ using STL
E
Data Structures: CSCI 362 – Overview of STL Container Classes
Priority Queue Containers
A priority queue is a storage structure that has restricted
access operations similar to a stack or queue.
Elements can enter the priority queue in any order. Once
in the container, a delete operation removes the largest
(or smallest) value.
Value = 8
18
13
3
15
27
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Associative Containers – Maps/ Multimaps
A set is a collection of unique values, called keys or set members.
Set A
5
Set B
1
3
27
Dr. Nazli Mollah
15
Buick
BMW
Ford
Jaguar
Honda
Jeep
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Associative Containers – Sets/ Multisets
A map is a storage structure that implements a key-value relationship.
Index
Part#
Price
A29-468
D7B-916
4.95
Mirage
D7B-916
W91-A83
12.50
Calloway
W91-A83
A29-468
8.75
Martin
Dr. Nazli Mollah
Vendor
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Stacks





Further Stack Analogies
Pushing/ Popping a Stack
Class Stack
Mutlibase
Uncoupling Stack
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Stacks

A sequence of items which are accessible only at the top
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Stack - LIFO

Since pop removes the item last pushed into the stack – it is a Last In First out
LIFO ordering container
C
B
B
B
A
A
A
A
A
A
Push A
Push B
Push C
Pop C
Pop B
Push D
Dr. Nazli Mollah
D
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
CLASS Stack
CLASS stack
stack();
Create an empty stack
CLASS stack
Constructor
<stack>
Operations
<stack>
bool empty(); const
Check whether the stack is empty. Return true if it is
empty and false otherwise.
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
CLASS Stack
CLASS stack
<stack>
Operations
void pop();
Remove the item from the top of the stack.
Precondition:
The stack is not empty.
Postcondition: Either the stack is empty or
the stack has a new topmost
item from a previous push.
void push(const T& item);
Insert the argument item at the top of the stack.
Postcondition: The stack has a new item at
the top.
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
CLASS Stack
CLASS stack
Operations
<stack>
int size() const;
Return the number of items on the stack.
T& top() const;
Return a reference to the value of the item at the
top of the stack.
Precondition: The stack is not empty.
const T& top() const;
Constant version of top().
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Using a Stack to Create a Hex Number
A
'F'
F
431 % 16 = 15
431 / 16 = 26
1
1
'1'
'1'
A
A
'A'
'A'
'A'
F
'F'
F
'F'
F
'F'
26 % 16 = 10
26 / 16 = 1
1 % 16 = 1
1 / 16 = 0
A'A'
F
'F'
Pop '1'
numStr = "1"
Push Digit Characters
F
'F'
Pop 'A'
Pop 'F'
numStr = "1A" numStr = "1AF"
Pop Digit Characters
Refer to Multi-base program 7-1, page 334
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling Stack Elements
A
B
Train Before Uncoupling E
E
C
D
Refer to code on page 337 using “target”
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling Stack Elements
A
Uncouple E. Move to side track
B
C
D
E
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling Stack Elements
Uncouple D. Move to side track
A
B
C
D
E
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling Stack Elements
Uncouple C Move aside
A
B
C
D
E
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling Stack Elements
Attach D to end of train
A
B
D
C
E
Dr. Nazli Mollah
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling Stack Elements
A
Dr. Nazli Mollah
Attach E to end of train
B
D
E
C
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Uncoupling using “target”
pop
3
target
e
1
d
2
2
push
c
b
a
stack s
Dr. Nazli Mollah
pop
d
1
d
e
tmpStk
e
b
a
stack s
Refer to code on page 337 using
“target”
lecture
notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Arguments
int n
Return Address
RetLoc or RetLoc2
Activation Record
Syste m Stack
In main():
call fact(4)
In fact(4):
call fact(3)
Dr. Nazli Mollah
Argument
4
Return
RetLoc1
Argument
3
Return
RetLoc2
Argument
4
Return
RetLoc1
lecture notes adapted from
Data Structures with C++ using STL
Structures: CSCI 362 – Overview of STL Container Classes
RPN (Reverse Data
Polish
Notation) expression 2 3 +
Scan of Expression and Action Current operandStack
1. Identify 2 as an operand.
Push integer 2 on the stack.
2
2. Identify 3 as an operand.
Push integer 3 on the stack.
3
3. Identify + as an operator
Begin the process of evaluating +.
3
2
2
4. getOperands() pops stack
twice and assigns 3 to
right and 2 to left.
operandStack empty
5. compute() evaluates left + right
and returns the value 5. Return
value is pushed on the stack.
29Dr. Nazli Mollah
Main Index
Contents
5
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Infix Expression Rules
The figure below gives input precedence, stack precedence, and
rank used for the operators +, -, *, /, %, and ^, along with the
parentheses. Except for the exponential operator ^, the other
binary operators are left-associative and have equal input and
stack precedence.
Precedence
Symbol
Input
precedence
+ * / %
^
(
)
1
2
4
5
0
30Dr. Nazli Mollah
Stack
precedence
1
2
3
-1
0
Main Index
Contents
Rank
-1
-1
-1
0
0
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Summary Slide 1
§- Stack
- Storage Structure with insert (push) and erase (pop)
operations occur at one end, called the top of the
stack.
- The last element in is the first element out of the
stack, so a stack is a LIFO structure.
31Dr. Nazli Mollah
Main Index
Contents
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Summary Slide 2
§- Recursion
- The system maintains a stack of activation records
that specify:
1) the function arguments
2) the local variables/objects
3) the return address
- The system pushes an activation record when
calling a function and pops it when returning.
32Dr. Nazli Mollah
Main Index
Contents
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Summary Slide 3
§- Postfix/RPN Expression Notation
- places the operator after its operands
- easy to evaluate using a single stack to hold
operands.
- The rules:
1) Immediately push an operand onto the stack.
2) For a binary operator, pop the stack twice, perform the
operation, and push the result onto the stack.
3)
At the end a single value remains on the stack. This is
the value of the expression.
33Dr. Nazli Mollah
Main Index
Contents
lecture notes adapted from
Data Structures with C++ using STL
Data Structures: CSCI 362 – Overview of STL Container Classes
Summary Slide 4
§- Infix notation
- A binary operator appears between its operands.
- More complex than postfix, because it requires the
use of operator precedence and parentheses.
- In addition, some operators are left-associative, and
a few are right-associative.
34Dr. Nazli Mollah
Main Index
Contents
lecture notes adapted from
Data Structures with C++ using STL
Download