Работа С Контейнерами. Вопросы По Программе.с++

Тема в разделе "C/C++/C#", создана пользователем Rivet, 15 ноя 2011.

Статус темы:
Закрыта.
  1. Rivet

    Rivet Гость

    задача, иллюстрирующая работу с контейнерами. в результате ее прогона, на экран выводятся числа от 0 до 9. не могли бы вы объяснить буквально на пальцах прогу? а то я смотрю на нее и не понимаю. причем, к сожалению, не понимаю все с самого начала.
    я откомментировала что и как понимаю, а так же свои вопросы.

    Код (C++):
    #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();

    }

    }
     
Загрузка...
Похожие Темы - Работа Контейнерами Вопросы
  1. Andrey Kha
    Ответов:
    0
    Просмотров:
    23
  2. Hoasker
    Ответов:
    0
    Просмотров:
    64
  3. garri671
    Ответов:
    0
    Просмотров:
    54
  4. lelik200969
    Ответов:
    0
    Просмотров:
    50
  5. Kozolick
    Ответов:
    0
    Просмотров:
    138
Статус темы:
Закрыта.

Поделиться этой страницей