задача иллюстрирующая работу с контейнерами. в результате ее прогона на экран выводятся числа от 0 до 9. не могли бы вы объяснить буквально на пальцах прогу? а то я смотрю на нее и не понимаю. причем, к сожалению, не понимаю все с самого начала.
я откомментировала что и как понимаю, а так же свои вопросы.
Код:
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include <exception>
using namespace std;
template < class Object > // шаброн; class object - параметр шаблона?
class vector // клас вектор.
{
public:
explicit vector(int initSize = 0): theSize(initSize),// explicit следует писать для всех конструкторов с одним параметром( а для чего?). т.е. мы объявили конструктор vector; theSize(initSize) - функция кол-ва элементов, а theCapacity(initSize) - вместимость
theCapacity(initSize) // или theSize и theCapacity тож конструкторы???
{objects = new Object[theCapacity];}// создаем объект с вместимостью theCapacity?
vector(const vector &rhs):(NULL) // что значит двоеточие после ()? и почему const vector и зачем &rhs
{operator = (rhs);}// ?
~vector()// деструктор
{delete [] objects;}
bool empty( ) const // это функция ?
{ return size( ) == 0; }
Object & operator [] (int index) // а это что?
{
#ifndef NO_CHECK // директива проверки выхода из области вектора?
if( index < 0 || index >= size())
throw ArrayIndexOutOfBoundException();// trow - устанавливает тип выбрасываемых исключений?
#endif
return objects[index];
}
const vector & operator = ( const vector &rhs);//перегрузка =?
void resize (int newSize); // ф-я изменения размера вектора(меняет на newSize)
void reserve(int newCapacity); // изменяет вместимость вектора
void push_back(const Object &x);// вставка в конец
int size()const{return theSize;}// размер вектора? почему сonst?
int capacity()const{ return theCapacity;}// тот же вопрос. при чем тут const
const Object & back( ) const;//что это
void pop_back( );// удаление с конца
private:
int theSize;
int theCapacity;
Object * objects;// что это?
};
template <class Object>
const vector<Object>&// зачем & ? это же ,bn равный нулю?
vector<Object>::operator =(const vector<Object>&rhs)
{
if(this != & rhs)// ?
{
delete [] objects; // что мы удаляем?
theSize = rhs.size();// новый размер
theCapacity = rhs.capacity();//новая вместимость
object = new Object[capacity()];// новый вектор
for( int k = 0; k < size();k++)// заполняем вектор?
objects[k]=rhs.objects[k];
}
return *this;// что мы возвращаем?
}
template <class Object>
void vector <Object>::push_back(const Object& x)// вставляем элемент в конец
{
if(theSize == theCapacity)// если размер равен вместимости
reserve(2*theCapacity+1);// увеличиваем вместимость (в два раза +1?)
objects[ theSize++] = x;// записываем на след-е место наш элемент?
}
template <class Object>
void vector <Object>::reserve(int newCapacity)// изменение вместимости
{
Object *oldArray = objects;// что мы делаем?
int numToCopy = newCapacity<theSize?newCapacity:theSize;// вообще не понятна эта строка; numToCopy - что в этой переменной.
objects = new Object[newCapacity];// в старый объект присваиваем новый с новой вместимостью?
for(int k = 0; k < numToCopy;k++)
objects[k]=oldArray[k];// переписываем значения старого вектора в новый
theSize = numToCopy;//изменяется размер и
theCapacity = newCapacity;// вместимость
delete[] oldArray;// удаляем старый вектор
}
template <class Object>
void vector<Object>::pop_back( )// удаление с конца
{
if( empty( ) )// если вектор пуст печатаем сообщение
throw ( "Cannot call pop_back on empty vector" );
theSize--;// если нет, уменьшаем размер на 1
}
template <class Object>
const Object & vector<Object>::back( ) const// что это?
{
if( empty( ) )
throw ( "Cannot call back on empty vector" );
return objects[ theSize-1 ];
}
void main()
{
vector <int> v[10]; // вектор v[10]
int i = 0;
for(i = 0;i<10;i++)
v->push_back(i); // заполняем вектор от 0 до 9 вставляя значения в конец вектора
i = 0;
int k = v->size();// ?
while(i < k)
{
cout << v->back();// что значит конструкция ->
v->pop_back();
cout << endl;
i++;
}
getch();
}
}