Skip to main content

Part1 : STL Algorithms (Non-Modifying sequence) in c++

Non-Modifying sequence operations:


1. Non-modifying sequence operations: _of (CPP 11)


std::array all_of_elem = { 3,5,7,11,13,17,19,23 };




1. if (std::all_of(all_of_elem.begin(), all_of_elem.end(), [](int i) {return i % 2; }))
std::cout << "All the elements are odd numbers.\n";



std::array any_of_elem = { 0,1,-1,3,-3,5,-5 };

2. if (std::any_of(any_of_elem.begin(), any_of_elem.end(), [](int i) {return i<0 font="">))
std::cout << "There are negative elements in the range.\n";




std::array foo = { 1,2,4,8,16,32,64,128 };

3. if (std::none_of(foo.begin(), foo.end(), [](int i) {return i<0 font="">))

std::cout << "There are no negative elements in the range.\n";



2. Non-modifying sequence operations: find

     std::string myints[] = { "Hello", "Hi", "Bye", "ByeBye" };
std::vector myvector(myints, myints + 4);
std::vector::iterator it;

       //Find Without predicate comparison

1. it = find(myvector.begin(), myvector.end(), "Hi");
if (it != myvector.end())
std::cout << "Element found in myvector: " << *it << '\n';
else
std::cout << "Element not found in myvector\n";



2. std::vector::iterator iterator = std::find_if(myvector.begin(), myvector.end(), [=](std::string x) { return  x == "Hi"; });

if(iterator != myvector.end())
std::cout << "find_if: Element found in myvector: " << *iterator << '\n';
else
std::cout << "find_if: Element not found in myvector\n";


 (CPP 11)
3. std::vector::iterator iterator_not = std::find_if_not(myvector.begin(), myvector.end(), [=](std::string x) {return  x.compare("ii") != 0;});

if (iterator_not != myvector.end())
std::cout << "find_if_not: Element found in myvector: " << *iterator_not << '\n';
else
std::cout << "find_if_not: Element not found in myvector\n";




             //Find With predicate comparison


4. int sampleints[] = { 1,2,3,4,6,1,2,3,4,5 };
std::vector haystack(sampleints, sampleints + 10);
int needle1[] = { 1,2,3, 4 };
        std::vector::iterator it_find_end;

// using default comparison:

it_find_end = std::find_end(haystack.begin(), haystack.end(), needle1, needle1 + 4);

if (it_find_end != haystack.end())
std::cout << "find_end: needle1 last found at position " << (it_find_end - haystack.begin()) << '\n';
else
std::cout << "find_end: needle1 last found at position " << '\n';



//Using predicate comparison :

int needle2[] = { 3,4,5};

         it_find_end = std::find_end(haystack.begin(), haystack.end(), needle2, needle2 + 3, myfunction);

if (it_find_end != haystack.end())
std::cout << "find_end: needle2 last found at position " << (it_find_end - haystack.begin()) << '\n';
else
std::cout << "find_end: needle2 last found at position " << '\n';






int mychars[] = { 'a','b','c','A','B','C' };
std::vector myystack(mychars, mychars + 6);
std::vector::iterator it_find_first_of;
int needle[] = { 'A','B','C' };

// using default comparison:

5. it_find_first_of = find_first_of(myystack.begin(), myystack.end(), needle, needle + 3);

if (it_find_first_of != myystack.end())
std::cout << "find_first_of: The first match is: " << *it_find_first_of << '\n';
else
std::cout << "find_first_of: The first match is: NONE"<< '\n';


// using predicate comparison:

it_find_first_of = find_first_of(myystack.begin(), myystack.end(),
needle, needle + 3, comp_case_insensitive);

if (it_find_first_of != myystack.end())
std::cout << "find_first_of: The first match is: " << *it_find_first_of << '\n';
else
std::cout << "find_first_of: The first match is: NONE" << '\n';






int myAdjacentints[] = { 5,20,5,30,30,20,10,10,20 };
std::vector myAdjacentVector(myAdjacentints, myAdjacentints + 8);
std::vector::iterator it_adjacent_find;
  
        // using default comparison:

6. it_adjacent_find = std::adjacent_find(myAdjacentVector.begin(), myAdjacentVector.end());

if (it_adjacent_find != myAdjacentVector.end())
std::cout << "the first pair of repeated elements are: " << *it_adjacent_find << '\n';

//using predicate comparison:
it_adjacent_find = std::adjacent_find(++it_adjacent_find, myAdjacentVector.end(), myfunction);

if (it_adjacent_find != myAdjacentVector.end())
std::cout << "the second pair of repeated elements are: " << *it_adjacent_find << '\n';

Comments

Popular posts from this blog

Containers in c++

SEQUENTIAL CONTAINER Vector (Dynamic Array - Contiguous memory):  O(1): Vectors provide fast (constant time) element insertion and deletion at the end of the vector and Acess. O(n): Slow (linear time) insertion and deletion anywhere else. Insertion and deletion are slow because the operation must move all the elements “down” or “up” by one to make room for the new element or to fill the space left by the deleted element. Like arrays, vectors provide fast (constant time) access to any of their elements. List (Doubly Linked List - Not  Contiguous memory ): O(n): Lists provide slow (linear time) element lookup and access, O(1):  (constant time) insertion and deletion of elements once the relevant position has been found Deque (Doubly Ended Queue - Not Contiguous memory): O(1): (constant time) element access. Like a list, it provides fast (amortized constant time) insertion and deletion at both ends of the sequence. O(1):  (lin...

Sequence Containers: Vectors

Vectors are sequence containers representing arrays that can change in size. Just like arrays, vectors use contiguous storage locations for their elements, which means that their elements can also be accessed using offsets on regular pointers to its elements, and just as efficiently as in arrays. But unlike arrays, their size can change dynamically, with their storage being handled automatically by the container. Container properties Sequence Dynamic array Allocator-aware Example : #include #include int main () { std::vector< int > myvector; for ( int i=1; i<=5; i++) myvector.push_back(i); std::cout << "myvector contains:" ; for (std::vector< int >::iterator it = myvector.begin() ; it != myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n' ; return 0; }