// Lab 13 - STL deque
// Programmer: Elaine Torrez
// Class: CMPR 121

#include <iostream>
#include <deque>
using namespace std;

void showNumbers(deque<int> numbers);

int main()
{
    deque<int> numbers;

    numbers.push_back(1);
    numbers.push_front(2);
    numbers.push_back(3);
    numbers.push_front(4);
    numbers.push_back(5);
    numbers.push_front(6);

    showNumbers(numbers);

    return 0;
}

void showNumbers(deque<int> numbers)
{
    deque<int>::iterator iter;

    cout << "Here are the values in the deque:" << endl;

    for (iter = numbers.begin(); iter != numbers.end(); iter++)
    {
        cout << *iter << endl;
    }

    cout << "Number of values in the deque: " << numbers.size() << endl;
    cout << "Maximum values: " << numbers.max_size() << " bytes." << endl;
    cout << endl;

    cout << "The value at index[2]: " << numbers[2] << endl;
    cout << "The value at the front: " << numbers.front() << endl;
    cout << "The value at the back: " << numbers.back() << endl;
    cout << endl;

    cout << "Now removing the front value. . ." << endl;
    numbers.pop_front();

    cout << "Here are the values after removing the front:" << endl;

    for (iter = numbers.begin(); iter != numbers.end(); iter++)
    {
        cout << *iter << endl;
    }

    cout << endl;

    cout << "Now removing the back value. . ." << endl;
    numbers.pop_back();

    cout << "Here are the values after removing the back:" << endl;

    for (iter = numbers.begin(); iter != numbers.end(); iter++)
    {
        cout << *iter << endl;
    }

    return;
}