Nothing new, but something for the neophyte to ponder. Some of the functions (algorithms) used by STL containers can be applied to a normal array to do inane things like copying, displaying, finding max/min, reversing, replacing, searching, shuffling, sorting, summation. This can really simplify your code.

thekashyap commented: Decent collection of examples.. +8
242 Views
``````// using STL container functions with arrays
// a Dev-C++ tested console application by  vegaseat  02jan2005

#include <iostream>
#include <algorithm>  // random_shuffle(), sort(), reverse() ...
#include <numeric>    // accumulate()
#include <iterator>   // ostream_iterator

using namespace std;

int main()
{
// set up output for integers
// display each element separated by a space
ostream_iterator<int>  out(cout," ");

// create an array of 10 integers
int iA[10];

for( int k = 0; k < 10; k++ )
{
iA[k] = k;
//cout << iA[k] << endl;  // just a check
}

// set iterators to begin and end of the array
// end does point one element past the loaded array
// this is not an error!
int * begin = &iA[0];
int * end = &iA[10];

// shuffle the array
cout << "array after random_shuffle:\n";
random_shuffle( begin, end );
// iterate through the array and display
copy( begin, end, out );
cout << endl;

// find max and min value
int * m;
m = max_element( begin, end);
cout << "max value in array = " << *m << endl;
m = min_element( begin, end);
cout << "min value in array = " << *m << endl;

// sort the array in ascending order
cout << "array after sort:\n";
sort( begin, end );
copy( begin, end, out );
cout << endl;

// search for a specific value, here 7
// needs sorted array!
if (binary_search( begin, end, 7) == true)
{
cout << "found integer 7 in sorted array\n";
}
else
{
cout << "didn't find 7\n";
}

// reverse it
cout << "sorted array in reverse:\n";
reverse( begin, end );
copy( begin, end, out );
cout << endl;

// replace any integer 3 with integer 8
cout << "sorted again and replaced 3 with an 8:\n";
sort( begin, end );
replace( begin, end, 3, 8 );
copy( begin, end, out );
cout << endl;

// replace any integers 8 with 3
cout << "replaced (any) 8 with 3:\n";
replace( begin, end, 8, 3 );
copy( begin, end, out );
cout << endl;

// add up all the integer values (init = 0)
int sum = accumulate( begin, end, 0);
cout << "sum of integer elements in array = " << sum << endl;
// copy array iA into array iB
// note that begin and end are the iterators for array iA
int iB[10] = {0};
copy( begin, end, iB );
cout << "copy array iA into array iB:" << endl;
for( int k = 0; k < 10; k++ )
{
cout << iB[k] << endl;
}
cout << endl;

// strings anyone?
string sA[10];
sA[0] = "Exact estimate";
sA[1] = "Pretty ugly";
sA[2] = "Diet ice cream";
sA[3] = "Tight slacks";
sA[4] = "Plastic glasses";
sA[6] = "Alone together";
sA[7] = "Genuine imitation";
sA[8] = "Found missing";

// set iterators to beginning and end of string array
// notice that endstr goes one element past the loaded array
string * beginstr = &sA[0];
string * endstr = &sA[10];
// change the output to handle strings and
// display each string on a new line
ostream_iterator<string>  outstr(cout,"\n");

copy( beginstr, endstr, outstr );
cout << endl;

// now for the fun of it ...
// also, binary search needs a sorted array
cout << "array after sort:\n";
sort( beginstr, endstr );
copy( beginstr, endstr, outstr );
cout << endl;

// you get the drift ...
if (binary_search( beginstr, endstr, "Butt Head") == true)
{
cout << "found Butt Head in sorted array\n";
}
else
{
cout << "didn't find Butt Head\n";
}
cout << endl;

cout << "let's reshuffle the strings:\n";
// for those of you who want to simplify the code, but make
// it somewhat harder to read, you can imply the iterators
//   random_shuffle( beginstr, endstr );
//   copy( beginstr, endstr, outstr );
// now becomes ...
random_shuffle( sA, sA+10 );
copy( sA, sA+10, outstr );
cout << endl;

// a simple search of an integer array
int a[12] = {1, 2, 5, 7, 9, 8, 7, 3, 9, 8, 5, 7};
int b[2] = {9, 8};  // search for b in a
int *p1, *p2;

p1 = search(a, a + 12, b, b + 2);    // get first match
p2 = find_end(a, a + 12, b, b + 2);  // get last match
cout << "looking for {9, 8} in {1, 2, 5, 7, 9, 8, 7, 3, 9, 8, 5, 7}:\n";
cout << "search() index = " << p1 - a << "  find_end() index = " << p2 - a << endl;

cin.get();  // make console display wait for key press
return 0;   // in the newer versions of C++ return is optional
}``````