// @topic T061020 std::vector demo
// @brief auto, std::sort( ), std::find( ), std::vector< >::iterator
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int do_stuff()
{
// Using C array
std::cout << "Array\n";
int myarray[] = { 10000, 2000, 300, 40, 5 };
std::sort( myarray, myarray+5 ); // arrays can be sorted
int* pbegin = myarray; // upper boundary
int* pend = myarray + 5; // lower boundary
for ( ; pbegin < pend; ++pbegin ) {
std::cout << *pbegin << " ";
}
// Using std::vector
std::cout << "\nVector\n";
std::vector< int > vect = { 10000, 2000, 300, 40, 5 };
//std::sort(vect.begin(), vect.end());
auto it = std::find( vect.begin(), vect.end(), 40 );
if ( it != vect.end() ) {
std::cout << "\nfound element" << *it << "\n";
std::cout
<< "\nthe value is "
<< std::distance(vect.begin(), it)
<< " elements away from the beginning\n";
*it = 50; // iterator behaves like pointer
++it;
} else {
std::cout << "\nelement not found\n";
std::cout
<< "\nthe value is "
<< std::distance(vect.begin(), it)
<< " elements away from the beginning\n";
}
// Before C++2011 we had to provide the type ourselves:
//std::vector< int >::iterator vbegin = vect.begin();
//std::vector< int >::iterator vend = vect.begin() + 5;
// After C++2011 we can ask compiler to deduce the type from the initializer:
auto vbegin = vect.begin();
auto vend = vect.end();
// Range loop can be used to access a sequence of elements
for ( auto& value : vect ) {
std::cout << value << " ";
value = 0;
}
std::cout << "\n";
// Alternatively, this loop is using the iterators to access the elements
for ( ; vbegin < vend; ++vbegin ) {
std::cout << *vbegin << " ";
}
std::cout << "\n";
// Vectors are dynamic arrays - the size can grow and collapse:
vect.push_back( 100 );
vect.clear();
return 0;
}
int main()
{
int result = do_stuff();
system( "pause" );
return result;
}