29
EC-241 Object Oriented Programming LECTURE 14

EC-241 Object Oriented Programming

Embed Size (px)

DESCRIPTION

EC-241 Object Oriented Programming. LECTURE 14. STL Algorithms. The find() Algorithm Looks for the first element in a container that has a specified value. Find() example. #include < iostream > #include using namespace std ; int arr []={11, 22, 33, 44, 55, 66, 77, 88}; - PowerPoint PPT Presentation

Citation preview

Page 1: EC-241 Object Oriented Programming

EC-241 Object Oriented Programming

LECTURE 14

Page 2: EC-241 Object Oriented Programming

STL Algorithms

• The find() Algorithm– Looks for the first element in a container that has

a specified value

Page 3: EC-241 Object Oriented Programming

Find() example#include <iostream>#include <algorithm>using namespace std;

int arr[]={11, 22, 33, 44, 55, 66, 77, 88};

void main(){

int *ptr;ptr= find(arr, arr+8, 33); // find first 33cout<<"First object with value 33 found at offset "

<<(ptr-arr)<<endl; //2}

Page 4: EC-241 Object Oriented Programming

• The first two parameters to find() specify the range of elements to be examined. These values are specified by iterators. In this example we use normal C++ pointer values, which are a special case of iterators

• The first parameter is the iterator of (or in this case the pointer to) the first value to be examined. The second parameter is the iterator of the location one past the last element to be examined. Since there are 8 elements, this value is the first value plus 8. This is called a past-the-end value; it points to the element just past the end of the range to be examined

Page 5: EC-241 Object Oriented Programming

The count() Algorithm

• Counts how many elements in a container have a specified value and returns this number

Page 6: EC-241 Object Oriented Programming

Count() example#include <iostream>#include <algorithm>using namespace std;

int arr[]={33, 22, 33, 44, 55, 33, 77, 88};

void main(){

int n=count(arr, arr+8, 33); //count the number of 33'scout<<"There are "<<n<<" 33's in arr. "<<endl; //3

}

Page 7: EC-241 Object Oriented Programming

The sort() Algorithm#include <iostream>#include <algorithm>using namespace std;

int arr[]={33, 22, 45, -44, 55, 33, 77, 0};

void main(){

sort(arr, arr+8);for (int j=0; j<8; j++)

cout<<arr[j]<<' ';cout<<endl;

}

Page 8: EC-241 Object Oriented Programming

The search() Algorithm

• Looks for a sequence of values specified by one container, within another container

Page 9: EC-241 Object Oriented Programming

The search() Algorithmint arr[]={33, 22, 45, -44, 55, 33, 22, 77, 0};int pattern[]={33, 22};

void main(){

int * ptr;ptr=search(arr, arr+9, pattern, pattern+2);if (ptr==arr+9)

cout<<"no match found\n";else

cout<<"match at "<<(ptr-arr)<<endl; //match at 0

}

Page 10: EC-241 Object Oriented Programming

The merge() Algorithm

• Works with three containers, merging the elements from two source containers into a destination container

Page 11: EC-241 Object Oriented Programming

The merge() Algorithmint src1[]={2, 3, 4, 6, 8};int src2[]={1, 5, 7};int dest[8];

void main(){

merge(src1, src1+5, src2, src2+3, dest);for (int j=0; j<8; j++)

cout<<dest[j]<<' '; //1 2 3 4 5 6 7 8cout<<endl;

}

Page 12: EC-241 Object Oriented Programming

Sequence Containers

• Vectors• Lists• deques

Page 13: EC-241 Object Oriented Programming

Vectors

• Smart form of array• Manage storage allocation• Expand or contract as elements are

inserted/removed• Fast random access

Page 14: EC-241 Object Oriented Programming

Member functions push_back, size(), and operator []

#include <iostream>#include <vector>using namespace std;void main(){

vector <int> v;//put values at endv.push_back(10);v.push_back(11);v.push_back(12);v.push_back(13);

Page 15: EC-241 Object Oriented Programming

Member functions push_back, size(), and operator []

//replace with new valuesv[0]=20;v[3]=23;

for (int j=0; j<v.size(); j++)cout<<v[j]<<' '; //20 11 12 23

cout<<endl;}

Page 16: EC-241 Object Oriented Programming

Member Functions swap(), empty(), back(), and pop_back()

double arr[]={1,1,2,2,3,3,4,4}; //an array of double

vector <double> v1(arr, arr+4); //initialize vector to arrayvector <double> v2(4); //empty vector with size 4

v1.swap(v2); //swap contents of v1 and v2

while (!v2.empty()) {

cout<<v2.back()<<' '; //display the last elementv2.pop_back(); //remove the last element}

cout<<endl;

Page 17: EC-241 Object Oriented Programming

Member Functions swap(), empty(), back(), and pop_back()

if(v1.empty())cout<<"v1 is empty"<<endl;

if (v2.empty())cout<<"v2 is empty"<<endl;

}

Page 18: EC-241 Object Oriented Programming

Member Functions swap(), empty(), back(), and pop_back()

Page 19: EC-241 Object Oriented Programming

Member Functions swap(), empty(), back(), and pop_back()

• The swap() member function exchanges all data in one vector with all data in another, keeping the elements in the same order

• The back() m. function returns the value of the last element in the vector

• The pop-back() m. function removes the last element of the vector

Page 20: EC-241 Object Oriented Programming

Member Functions insert() and erase()

int arr[]={100, 110, 120, 130};

vector <int> v(arr, arr+4);

cout<<"\nBefore insertion: ";for (int j=0; j<v.size(); j++)

cout<<v[j]<<' ';

v.insert(v.begin()+2, 115); //insert 115 at element 2

cout<<"\nAfter insertion: ";for (int j=0; j<v.size(); j++)

cout<<v[j]<<' ';

Page 21: EC-241 Object Oriented Programming

Member Functions insert() and erase()

v.erase(v.begin()+2); //erase element 2

cout<<"\nAfter erasure: ";for (int j=0; j<v.size(); j++)

cout<<v[j]<<' ';

cout<<endl;

Page 22: EC-241 Object Oriented Programming

Member Functions insert() and erase()

Page 23: EC-241 Object Oriented Programming

Lists

• Doubly linked• The container contains the address of both

the front and the back elements

Page 24: EC-241 Object Oriented Programming

Member Functions push_front(), front(), and pop_front()

#include <iostream>#include <list>using namespace std;

void main(){

list <int> iList;

iList.push_back(30);iList.push_back(40);iList.push_front(20);iList.push_front(10);

int size=iList.size();

Page 25: EC-241 Object Oriented Programming

Member Functions push_front(), front(), and pop_front()

for (int j=0; j<size; j++){

cout<<iList.front()<<' ';//10 20 30 40iList.pop_front();

}cout<<endl;

}

Page 26: EC-241 Object Oriented Programming

Member Functions reverse(), merge(), unique()

int j;list <int> list1, list2;int arr1[]={40, 30, 20, 10};int arr2[]={15, 20, 25, 30, 35};for (j=0; j<4; j++)

list1.push_back(arr1[j]);//list1: 40 30 20 10for (j=0; j<5; j++)

list2.push_back(arr2[j]);//list2: 15 20 25 30 35

Page 27: EC-241 Object Oriented Programming

Member Functions reverse(), merge(), unique()

list1.reverse(); //reverse list1: 10 20 30 40list1.merge(list2); //merge list2 into list1list1.unique(); //remove duplicate 20 and 30

while (!list1.empty()){

cout<<list1.front()<<' ';list1.pop_front(); //10 15 20 25 30 35 40

}cout<<endl;

}

Page 28: EC-241 Object Oriented Programming

Deques

• Like a vector in some ways, like a linked list in others

• Like a vector: random access (operator [])• Like a list: access at both ends• Unlike vector: non-contiguous memory (non-

relocatable)

Page 29: EC-241 Object Oriented Programming

#include <iostream>#include <deque>using namespace std;

void main(){

deque <int> deq;

deq.push_back(30);deq.push_back(40);deq.push_back(50);deq.push_front(20);deq.push_front(10);

deq[2]=33;

for (int j=0; j<deq.size(); j++)cout<<deq[j]<<' '; //10 20 33 40 50

cout<<endl;}