#include <vector>
#include <iostream>
#include <string>

using namespace std;

template <class T>
void display_vector( vector<T> vec )
{
	cout << "display_vector: ";
	for( typename vector<T>::iterator p = vec.begin(); p != vec.end(); p++ )
		cout << *p << ", ";
	cout << endl;
}

int main()
{
	vector<int> nums;

	// insert 1 ... 10 into nums
	for( int i=1; i<11; i++ )
		nums.push_back(i);

	cout << "First number= " << nums.front() << endl;
	cout << "Last number= " << nums.back() << endl;

	// iterate by index
	cout << "By index: ";
	for( int i=0; i < nums.size(); i++ )
		cout << nums[i] << ", ";
	cout <<endl;

	// iterate by iterator
	cout << "By iterator: ";
	for( vector<int>::iterator p = nums.begin(); p != nums.end(); p++ )
		cout << *p << ", ";
	cout << endl;

	// iterate by auto 
	cout << "By auto: ";
	for( auto p = nums.begin(); p != nums.end(); p ++ )
		cout << *p << ", ";
	cout << endl;

	// iterate by shortcut
	//for( auto v : nums )
	//	cout << v << ", ";

	// reverse iterator
	cout << "Reverse iterator: ";
	for( vector<int>::reverse_iterator r = nums.rbegin(); r != nums.rend(); r++ )
		cout << *r << ", ";
	cout << endl;

	display_vector( nums );

	vector<double> doubles;
	doubles.push_back(1.3);
	display_vector( doubles );

	int sum=0;
	for( auto x = nums.begin(); x != nums.end(); x++ )
		sum += *x;
	cout << "Total sum = " << sum << endl;

	nums.pop_back();
	display_vector(nums);

	nums.clear();
	display_vector(nums);

	if(nums.empty() )
		cout << "Empty" << endl;
	else
		cout << "Not empty" << endl;


	system("pause");
}