// @topic T53315 12/11/2012 -- STL containers and iterators
// @brief std::vector, std::string, vector iterator, toupper(), tolower(), auto

#include <string>
#include <iostream>
#include <vector>

int main()
{
    std::string str = "Hello World!";
    //std::string str( 15, 'z' );
    std::vector< int > vect( str.length() );

    int idx = 0;
    for ( ; idx < str.length(); ++idx ) {
        vect[ idx ] = toupper( str[ idx ] );
        //std::cout << vect[ idx ] << ' ';
    }

    std::vector< int >::iterator it_start = vect.begin() + 1;
    std::vector< int >::iterator it_end = vect.end() - 2;
    //auto it_start = vect.begin() + 1;
    //auto it_end = vect.end() - 2;

    int dist = it_end - it_start;

    std::cout << "the distance is " << dist;
    std::cout << '\n';
    while( it_start < it_end) {
        *it_start = tolower( *it_start );
        std::cout << char( *it_start ) << ' ';
        ++it_start;
    }
    std::cout << '\n';
}