Lecture 7-3 : STL Algorithms. STL Algorithms The Standard Template Library not only contains container classes, but also algorithms that operate on sequence.

Slides:



Advertisements
Similar presentations
Brown Bag #2 Advanced C++. Topics  Templates  Standard Template Library (STL)  Pointers and Smart Pointers  Exceptions  Lambda Expressions  Tips.
Advertisements

Vectors, lists and queues
C++ Templates. What is a template? Templates are type-generic versions of functions and/or classes Template functions and template classes can be used.
C++ Sets and Multisets Set containers automatically sort their elements automatically. Multisets allow duplication of elements whereas sets do not. Usually,
STL. What is STL? Standard Templates Library Templates are best used for –Defining containers for storing data –Some kinds of algorithms that work the.
More on the STL vector list stack queue priority_queue.
Lecture 4 Sept 4 Goals: chapter 1 (completion) 1-d array examples Selection sorting Insertion sorting Max subsequence sum Algorithm analysis (Chapter 2)
Templates & STL Instructor: 小黑. Templates  Template serves as a class outline, from which specific classes are generated at compile time.  One template.
OOP Etgar 2008 – Recitation 101 Object Oriented Programming Etgar 2008 Recitation 10.
C++ Programming: Program Design Including Data Structures, Second Edition Chapter 22: Standard Template Library (STL)
Searching Arrays Linear search Binary search small arrays
Data Structures Using C++1 Chapter 13 Standard Template Library (STL) II.
Templates and the STL.
CSE 332: C++ Algorithms II From Last Time: Search with Generic Iterators Third generalization: separate iterator type parameter We arrive at the find algorithm.
STL Standard Template Library ● Good reference book: – The C++ Standard Library ● A Tutorial and Reference ● by Nicolai M. Josuttis ● 1999 – Addison Wesley.
STL !!!generic programming!!! Anar Manafov
Containers Overview and Class Vector
11 COS220 Concepts of PLs AUBG, COS dept Lecture 36 OOP The STL Standard Template Library Reference: MS Developer Studio, Visual C++, Lafore, Chap 15 STL,
DATA STRUCTURES AND ALGORITHMS Lecture Notes 12 Prepared by İnanç TAHRALI.
Chapter 13 Recursion. Learning Objectives Recursive void Functions – Tracing recursive calls – Infinite recursion, overflows Recursive Functions that.
1 Lecture 5: Part 1 Searching Arrays Searching Arrays: Linear Search and Binary Search Search array for a key value Linear search  Compare each.
Chapter 8 Searching and Sorting Arrays Csc 125 Introduction to C++ Fall 2005.
Starting Out with C++, 3 rd Edition 1 Searching an Arrays.
February 4, 2005 Searching and Sorting Arrays. Searching.
Searching Dr. Jose Annunziato. Linear Search Linear search iterates over an array sequentially searching for a matching element int linearSearch(int haystack[],
Searching. Linear (Sequential) Search Search an array or list by checking items one at a time. Linear search is usually very simple to implement, and.
Department of Computer Science and Engineering, HKUST 1 HKUST Summer Programming Course 2008 Standard Template Library (STL) ~ Generic Programming.
Data Structures Using C++ 2E Chapter 13 Standard Template Library (STL) II.
Templates code reuse - inheritance - template classes template classes - a class that is not data-type specific - eg. a class of Array of any type - intArray,
Chapter 9: Part 2: Vectors + Maps and STL Overview JPC and JWD © 2002 McGraw-Hill, Inc. Modified by S. Sudarshan.
1 Iterators Good reference site:
Lecture 8-3 : STL Algorithms. STL Algorithms The Standard Template Library not only contains container classes, but also algorithms that operate on sequence.
ITERATORS. Iterator An iterator in C++ is a concept that refines the iterator design pattern into a specific set of behaviors that work well with the.
Lecture 7 : Intro. to STL (Standard Template Library)
1 Associative Containers Ordered Ordered Unordered UnorderedSets Maps as sets of pairs Set API Ex: Sieve of Eratosthenes Ex: Sieve of EratosthenesImplementation.
Starting Out with C++, 3 rd Edition Introduction to the STL vector The Standard Template Library (or STL) is a collection of data types and algorithms.
Mobility Research Lab mobility.ceng.metu.edu.tr Applied Innovative Interdisciplinary (AI2) Research Lab Short Course on Programming in C/C++
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 15. Dictionaries (1): A Key Table Class.
Vectors CSci 588: Data Structures, Algorithms and Software Design Fall 2011 All material not from online sources copyright © Travis Desell, 2011
1 The Standard Template Library Drozdek Section 3.7.
Algorithms CNS 3370 Copyright 2003, Fresh Sources, Inc.
 Introduction to Search Algorithms  Linear Search  Binary Search 9-2.
Introduction to Templates and Standard Template Library 1.
Looping I (while statement). CSCE 1062 Outline  Looping/repetition construct  while statement (section 5.1)
Searching Arrays Linear search Binary search small arrays
Lecture 36 OOP The STL Standard Template Library
Chapter 13 Recursion Copyright © 2016 Pearson, Inc. All rights reserved.
Concepts of Programming Languages
Lecture 7-2 : STL Iterators
The Sequential Search (Linear Search)
Sorting Algorithms.
Generic Programming Techniques in C++
Collections Intro What is the STL? Templates, collections, & iterators
Prof. Michael Neary Lecture 7: The STL Prof. Michael Neary
Lecture 7-3 : STL Algorithms
Lecture 7-2 : STL Iterators
C++ Functions, Classes, and Templates
priority_queue<T>
CMSC 202 Lesson 22 Templates I.
Elements are always copied when they are put into a container
Generic Set Algorithms
Lecture 8-2 : STL Iterators and Algorithms
Collections Intro What is the STL? Templates, collections, & iterators
The Sequential Search (Linear Search)
An Introduction to STL.
Some Definitions vector, string, deque, and list are standard sequence containers. set, multiset, map, multimap, unordered_set, unordered_multiset, unordered_map.
The Sequential Search (Linear Search)
Chapter 9 – Sets and Maps 9.1 Associative Container
Standard Template Library
Presentation transcript:

Lecture 7-3 : STL Algorithms

STL Algorithms The Standard Template Library not only contains container classes, but also algorithms that operate on sequence containers. To use them, we must write #include in our program. In this lesson we will see a few different algorithms contained in the STL (for others see the textbook): sort() find(), find_if() Etc binary_search, count, min/max, swap, partition, rotate set_difference, set_union, set_intersection

Example: STL Algorithm –sort() Let vector A; for some class T. Let vector ::iterator p, q sort(p, q) sorts A between p and q. Common case is sort(A.begin(), A.end()); sorts all of A.

example // sort without comparators #include using namespace std; template void Display(Iterator start, Iterator end) { for( Iterator p = start; p != end; ++p ) cout<< *p << “ “; } int main() { vector composer; composer.push_back(“Mozart”); composer.push_back(“Bach”); composer.push_back(“Chopin”); composer.push_back(“Beethoven”); cout<< “composer: “; Display(composer.begin(), composer.end()); cout<< endl; sort(composer.begin(), composer.end()); cout<< “composer: “; Display(composer.begin(), composer.end()); cout<< endl; vector v; for (int i = 1; i < 13; i++) { v.pushback(i*i % 13); } cout<< “v: “; Display(v.begin(), v.end()); cout<< endl; sort(v.begin(), v.end()); cout<< “v: “; Display(v.begin(), v.end()); cout<< endl; } Output composer: Mozart Bach Chopin Beethoven composer: Bach Beethoven Chopin Mozart v: v:

Example: STL Algorithm –sort() sort() also works with deque objects but not with list objects. In general, sort() works with any random access sequence container. Guaranteed O(n log n) running time.

See also sort() for user defined types example : stl_sort.cpp

Another Example: STL Algorithm – find() #include int main() { list composer; composer.push_back(“Mozart”); composer.push_back(“Bach”); composer.push_back(“Chopin”); composer.push_back(“Beethoven”); list ::iterator p; p = find(composer.begin(), composer.end(), “Bach”); if (p == composer.end()) { cout << “Not found.” << endl; } else if (++p != composer.end()) { cout<< “Found before: “ << *p << endl; } else { cout<< “Found at the end.” << endl; }

Algorithms, Iterators, and Sub-sequences Sequences/Sub-sequences are specified using iteratorsthat indicate the beginning and the end for an algorithm to work on. Here we find the 2 nd occurrence of the value, 341, in a sequence. // File “init.cpp” int f(int x) { return -x*x + 40*x + 22; } // // template void my_initialization(T& x) { const int N = 39; for (int j = 0; j < N; ++j) { x.push_back( f(j) ); }

Example #include #include ''init.cpp'' int main() { const int search_value= 341; vector x; my_initialization(x); vector ::iteratorp; p = find(x.begin(), x.end(), search_value); if (p != x.end()) {// Value found! p = find(++p, x.end(), search_value); // Find again if (p != x.end()) {// Value found again! cout<< “Found after: “ << *--p << endl; }

STL find() –‘Implementation’ equivalent to : find() searches linearly through a sequence, and stops when an item matches the 3rd argument. A big limitation of find() is that it requires an exact match by value. template IteratorT Find( IteratorT begin, IteratorT end, const T& value ) { for ( ; begin != end ; begin++) if (*begin == value) break; return begin; }

find() for user defind type operator== is necessary (no necessary for built-in type) #include using namespace std; class mytype { public : int key; int height; int weight; mytype(int k, int h, int w) : key(k), height(h), weight(w){} bool operator==(const int a) { if (key==a) return true; return false; } }; int main() { vector vec; mytype x1(1,172,70); mytype x2(2,163,50); mytype x3(3,178,74); mytype x4(4,185,80); vec.push_back(x1); vec.push_back(x2); vec.push_back(x3); vec.push_back(x4); for (int i=0;i<vec.size();i++) { cout << vec[i].key << " “ << vec[i].height << " “ << vec[i].weight << endl; } vector ::iterator p; p=find(vec.begin(),vec.end(),3); cout key height weight << endl; return 1; }

find_if Returns an iterator to the first element in the range [first,last) for which applying f to it, is true. // find_if example #include using namespace std; bool IsOdd (int i) { return ((i%2)==1); } int main () { vector myvector; vector ::iterator it; myvector.push_back(10); myvector.push_back(25); myvector.push_back(40); myvector.push_back(55); it = find_if (myvector.begin(), myvector.end(), IsOdd); cout << "The first odd value is " << *it << endl; return 0; } Output : The first odd value is 25

Many other useful functions…