Лекции.Орг


Поиск:




Базовые понятия




Алгоритм – вычислительная процедура.

Контейнер – класс, управляющий набором объектов в памяти.

Итератор – прослойка между конкретным контейнером и обобщенным алгоритмом.

Функциональный объект / функтор / - инкапсулирует функцию в объекте для использования другими. Лямбда-выражение – анонимный функтор со специальным синтаксисом.

Контейнеры

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

Простые контейнеры

2.1.1 Пара (Pair / Tuple)

Пара значений состоит из двух связанных как-то значений. Часто бывает лениво плодить отдельную структуру или класс только для того, чтобы объединить данные, списками которых обмениваются подпрограммы (смотрите подпрограмму в примере, типичный случай)… Когда количество данных невелико, используются пары. Пара агрегирует 2 значения и предоставляет к ним доступ.

Примеры создания пар ниже.

#include "stdafx.h"

#include <utility>

#include <vector>

 

using namespace std;

 

vector<pair<int, int> > GetPoints()

{

vector<pair<int, int> > points;

points.push_back(make_pair(1, 1));

points.push_back(make_pair(1, 3));

points.push_back(make_pair(2, 4));

return points;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

pair <int, int> point(13, 555); // конструкторы инициализации

pair <int, int> point2; // по-умолчанию

pair <int, int> point3(point); // копирования

 

auto point4 = make_pair(3, 4); // pair <int, int> point(3, 4);

 

auto points = GetPoints();

 

return 0;

}

Зачем добавили make_pair подпрограмму?

Чтобы не писать явно типы, вида pair<int, int>.

 

Как достать агрегированные данные?

Структура позволяет получить данные через поля first и second.

 

Как в дальнейшем развивался этот концепт?

Выяснилось, что иногда хочется агрегировать не 2, а больше данных: поэтому пару подогнули в других языках программирования, чтобы количество аргументов было опциональным. Также концепт переименовали в Tuple.

 

Насколько кошерно пользоваться парой?

Ведь исчезает смысл полей. Легко перепутать и ошибиться.

В принципе, когда передается много данных в паре, то приходится помнить, что за оно. Легко ошибиться, например, пришла пара tuple<int, int, int>(13,333,333), без просмотра исходного кода, сложно понять, какое число что обозначает. Подход: если где-то в одном месте это понадобилось сделать – то это еще ничего, а если внутри системы циркулируют только пары, то это некошерно: тяжело читать код, лучше завести структуру.

Контейнеры с последовательным доступом

Популярны vector, list. Остальные типы практически не используются и будут лишь упомянуты.





Поделиться с друзьями:


Дата добавления: 2015-05-05; Мы поможем в написании ваших работ!; просмотров: 456 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

1403 - | 1413 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.