Вектора в C++ (часть 2)

Это вторая статья посвященная векторам в языке программирования С++. Если вы не читали вводную статью по векторам, советую это сделать прямо сейчас. Итак, мы знаем как объявлять вектора, знаем какой заголовочный файл подключать и знаем некоторые методы для работы с векторами, все это мы узнали из предыдущей статьи. В этой статье я хочу показать вам еще несколько интересных методов для работы с векторами. Давайте сразу перейдем к практике:

#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
    int arraySize = 0;
    cout << "Введите размер массива: ";
    cin >> arraySize;
    vector<int> array(arraySize);

    cout << "Введите элементы массива: ";
    for(int i = 0; i < array.size(); i++) {
        cin >> array[i];
    }

    cout << "\nВведенный массив: ";
    if (!array.empty()) { // если массив не пуст
        // вывод на экран элементов массива
        copy( array.begin(), array.end(), ostream_iterator<int>(cout," ") );
    }
    cout << "\nКоличество элементов массива: " << array.size();

    vector<int> array2 = array; // присвоил все элементы array массиву array2
    cout << "\nЭлементы второго массива (скопированы из первого): ";
    copy( array2.begin(), array2.end(), ostream_iterator<int>(cout," ") );

    cout << "\nПервый элемент массива array2: " << array2.front() << endl;
    cout << "Последний элемент массива array2: " << array2.back() << endl;

    array.clear(); // удалим все элементы массива, array теперь пуст
    array2.push_back(-11); // в конец массива array2 добавили новый элемент (-11)

    cout << "Массив array2 с новым последним элементом: ";
    copy( array2.begin(), array2.end(), ostream_iterator<int>(cout," ") );
    return 0;
}

Строки 8 — 16 должны быть вам понятны. Тут мы ничего сверхъестественно не делаем, просто объявляем массив. Обратите внимание, что когда я говорю массив, я подразумеваю вектор. На функциональном уровне восприятия, вектора и массивы для вас должны быть одним и тем же. Это с точки зрения реализации, вектора — это модель данных, которая намного сложнее стандартных массивов С++. Вернемся к коду, в строках 18 — 22 выполняется вывод массива на экран, для нас это тоже не новое. В строке 23, с помощью функции size() мы получаем размер массива, согласитесь очень удобная штука.

Вспомните как сложно было присваивать обычные массивы, без цикла это было вообще не возможно. С векторами все обстоит иначе, доказательство тому — код в строке 25. Мы присвоили массиву array2 все элементы массива array и при этом воспользовались одной лишь операцией присваивания. Ну как, круто? Подождите, это еще не все.

Заголовочный файл векторов предоставляет нам еще две интересные функции — front() и back(), они возвращают первый и последний элементы массива, соответственно, смотрите строки 29-30. Кстати, если вдруг по ходу выполнения программы, нам вдруг понадобится удалить массив, мы можем воспользоваться функцией clear(), строка 32. По правде говоря, эта функция не удаляет полностью массив, она просто высвобождает память, которую занимают элементы этого массива. В итоге массив остается, но он будет пустым.

Как я упоминал, ранее, вектора могут изменять свой размер, ведь с технической точки реализации, вектора — это динамические массивы. В строке 33, к массиву array2 добавляется элемент -11, причем он добавляется в конец массива, соответственно и размер массива увеличивается на один элемент. Согласитесь это очень удобно. Давайте посмотрим результат работы программы:

CppStudio.com
Введите размер массива: 5
Введите элементы массива: 1
2
3
4
5
Введенный массив: 1 2 3 4 5
Количество элементов массива: 5
Максимальное количество элементов массива: 5
Элементы второго массива (скопированы из первого): 1 2 3 4 5
Первый элемент массива array2: 1
Последний элемент массива array2: 5
Массив с новым последним элементом: 1 2 3 4 5 -11

Как видно, из вывода программы, все выше сказанное полностью соответствует результату работы программы. Постарался подробно все изложить по данной теме, если что-то не понятно, задавайте вопросы в комментариях или на форуме.

Автор: Marienko L.
Дата: 15.01.2014
Поделиться:

Комментарии

  1. G.niyaz

    G.niyaz

    Извините но ostream_iterator<int>(cout,» «)  можно ли ее как нибудь по другому написать ?

     

  2. admin

    admin

    push_back() добавляет только в конец, в начало векторов вообще нельзя добавлять новые элементы, можно только перезаписывать существующие.

  3. G.niyaz

    G.niyaz

    к массиву array2 добавляется элемент -11 

    Почему ? и может ли он добавится в середине или начале массива ?

  4. G.niyaz

    G.niyaz

    ostream_iterator<int>(cout,» «) что такое итератор я у запутался , маленько , и зачем он нам нужен я по гуглел не нашел ничего особенного если у вас , Admin , есть время то пожалуйста объясните !

    • admin

      admin

      Простыми словами — это некий указатель на данные в памяти. С помощью итераторов, мы можем обращаться к «любым» элементам контейнера. В данном случае, с помощью итератора потока вывода ostream_iterator<int>(cout,»») мы организуем вывод в консоль.

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.