Литмир - Электронная Библиотека
A
A

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

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

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

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); // записываем в вектор

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

}

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

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

double temp;

Вот где указывается тип входных данных. Как видим, мы считываем и храним числа типа

double
.

Теперь выполняется цикл считывания.

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

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

Инструкция

cin>>temp
считывает число типа
double
, а затем это число “заталкивается” в вектор (записывается в конец вектора). Эти операции уже были продемонстрированы выше. Новизна здесь заключается в том, что в качестве условия выхода из цикла
while
мы используем операцию ввода
cin>>temp
. В основном условие
cin>>temp
является истинным, если значение считано корректно, в противном случае оно является ложным. Таким образом, в цикле
while
считываются все числа типа
double
, пока на вход не поступит нечто иное. Например, если мы подадим на вход следующие данные

1.2 3.4 5.6 7.8 9.0 |

то в вектор

temps
будут занесены пять элементов:
1.2
,
3.4
,
5.6
,
7.8
,
9.0
(именно в таком порядке, т.е.
temps[0]==1.2
). Для прекращения ввода используется символ
|
, т.е. значение, не имеющее тип
double
. В разделе 10.6 мы обсудим способы прекращения ввода и способы обработки ошибок ввода.

Записав данные в вектор, мы можем легко манипулировать ими. В качестве примера вычислим среднее и медиану значений температур.

// вычисляем среднее и медиану значений температур

int main()

{

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

  double temp;

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

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

                           // вычисляем среднюю температуру:

  double sum = 0;

  for (int i = 0; i < temps.size(); ++i) sum += temps[i];

  cout << "Average temperature: " << sum/temps.size() << endl;

  // вычисляем медиану температуры:

  sort(temps.begin(),temps.end()); // сортируем значения

                                   // температуры

                                   // "от начала до конца"

  cout << "Медиана температуры: " << temps[temps.size()/2] << endl;

}

Мы вычисляем среднее значение, просто суммируя все элементы и деля сумму на количество элементов (т.е. на значение

temps.size()
).

// вычисляем среднюю температуру :

double sum = 0;

55
{"b":"847443","o":1}