Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

vector<double> vd(1000,–1.2); // вектор из 1000 действительных

// чисел, инициализированных как –1.2

Пожалуйста, обратите внимание на то, что мы не можем просто сослаться на несуществующий элемент вектора.

vd[20000] = 4.7; // ошибка во время выполнения программы

Ошибки, возникающие во время выполнения программы, и работа с индексами описаны в следующей главе.

4.6.1. Увеличение вектора

Часто мы начинаем работу с пустым вектором и увеличиваем его размер по мере считывания или вычисления данных. Для этого используется функция
push_back
, добавляющая в вектор новый элемент. Новый элемент становится последним элементом вектора. Рассмотрим пример.

vector<double> v; // начинаем с пустого вектора,

// т.е. объект v не содержит ни одного элемента

v.push_back(2.7); // добавляем в конец вектора v элемент

// со значением 2.7

// теперь вектор v содержит один элемент

// и v[0]==2.7

v.push_back(5.6); // добавляем в конец вектора v элемент

// со значением 5.6

// теперь вектор v содержит два элемента

// и v[1]==5.6

v.push_back(7.9); // добавляем в конец вектора v элемент

// со значением 7.9

// теперь вектор v содержит три элемента

// и v[2]==7.9

Обратите внимание на синтаксис вызова функции

push_back
. Он называется вызовом функции-члена; функция
push_back
является функцией-членом объекта типа
vector
, и поэтому для ее вызова используется особая форма вызова.

вызов функции-члена:

имя_объекта.имя_функции_члена(список_аргументов)

Размер вектора можно определить, вызвав другую функцию-член объекта типа

vector: size
. В начальный момент значение
v.size
равно 0, а после третьего вызова функции
push_back
значение
v.size
равно
3
. Зная размер вектора, легко выполнить цикл по всем элементам вектора. Рассмотрим пример.

for(int i=0; i<v.size; ++i)

cout << "v[" << i << "]==" << v[i] << '\n';

Этот цикл выводит на экран следующие строки:

v[0]==2.7

v[1]==5.6

v[2]==7.9

Если вы имеете опыт программирования, то можете заметить, что тип

vector
похож на массив в языке С и других языках. Однако вам нет необходимости заранее указывать размер (длину) вектора, и вы можете добавлять в него элементы по мере необходимости. В дальнейшем мы убедимся, что тип
vector
из стандартной библиотеки С++ обладает и другими полезными свойствами.

4.6.2. Числовой пример

Рассмотрим более реалистичный пример. Часто нам требуется считать коллекцию данных в программу и что-то с ними сделать. Это “что-то” может означать построение графика, вычисление среднего и медианы, сортировку, смешивание с другими данными, поиск интересующих нас значений, сравнение с другими данными и т.п. Перечислять операции с данными можно бесконечно, но сначала данные необходимо считать в память компьютера. Рассмотрим основной способ ввода неизвестного — возможно, большого — объема данных. В качестве конкретного примера попробуем считать числа с плавающей точкой, представляющие собой значения температуры.

// считываем значения температуры в вектор

int main

{

vector<double> temps; // значения температуры

double temp;

while (cin>>temp) // считываем

temps.push_back(temp); // записываем в вектор

// ...что-то делаем...

}

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

  • Читать дальше
  • 1
  • ...
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: