Команда (фрилансеры)

Набираем команду фрилансеров, Вы:

  • Программист,
  • Дизайнер,
  • SEO-специалист,
  • Менеджер

Разработка на заказ

Наша команда фрилансеров выполнит
работы на заказ:

Создание и раскрутка сайтов
Разработка приложений (мобайл, десктоп, сервер)
Разработка игр (веб, мобайл, 3D)
Аутсорсинг, фриланс

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений
Сайт на C++
Наш сайт работает на C++ и это очень круто! =))

STL контейнеры

STL состоит из 5-ти основных компонентов, которые позволяют сильно упростить программный код:

  1. Контейнер — хранение набора объектов в памяти
  2. Итератор — средство доступа к отдельным объектам в контейнере
  3. Алгоритм — определение стандартных вычислительных процедур
  4. Адаптер — адаптация компонентов для обеспечения наиболее употребляемых интерфейсов (таких как стек или очередь)
  5. Функтор или функциональный объект — сокрытие функции в объекте для использования её другими категориями

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

Давайте разбираться подробнее.

Контейнеры

Контейнеры библиотеки STL разделим на четыре категории: последовательные, ассоциативные, контейнеры-адаптеры и псевдоконтейнеры.

Последовательные контейнеры STL

vector - динамический массив произвольного доступа с автоматическим изменением размера при добавлении/удалении элемента. Отлично! Вот оно! Как мы поняли из предыдущего урока http://sitev.ru/post/153 стандартные динамические массивы далеки от идеала. Пример:

#include <vector> // подключаем необходимую библиотеку
using namespace std;

int main()
{
	vector<int> vec;
	vec.push_back(10); // добавить новую запись в конец вектора
	vec.push_back(20);
	vec.push_back(30);
	
	getchar();

	return 0;
}

list - двусвязный список, элементы которого хранятся в произвольных кусках памяти, в отличие от контейнера vector, где элементы хранятся в непрерывной области памяти.

Чем же отличаются вектор и список? Это важно знать! Поиск перебором у list медленнее, чем у вектора из-за большего времени доступа к элементу. Зато, в любом месте списка вставка и удаление производятся очень быстро, в отличии от вектора.

deque - двухсторонняя очередь. Контейнер похож на vector, но с возможностью быстрой вставки и удаления элементов на обоих концах. Реализован в виде двусвязанного списка линейных массивов. В отличие от вектора, не гарантируется расположение всех своих элементов в непрерывном участке памяти, а значит, невозможно безопасное использование арифметики указателей для доступа к элементам контейнера.

Быстренько пробежимся по остальным контейнерам.

Ассоциативные контейнеры

  • set - упорядоченное множество уникальных элементов
  • multiset - то же что и set, но позволяет хранить повторяющиеся элементы
  • map - упорядоченный ассоциативный массив пар элементов, состоящих из уникальных ключей и соответствующих им значений
  • multimap - то же что и map, но позволяет хранить несколько одинаковых ключей.

Контейнеры-адаптеры

  • stack - cтек, в котором добавление и удаление элементов осуществляется с одного конца
  • queue - очередь, с одного конца которой можно добавлять элементы, а с другого — вынимать
  • priority_queue - очередь с приоритетом, организованная так, что самый большой элемент всегда стоит на первом месте.

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

  • bitset - контейнер битовых масок, похож на vector фиксированного размера, размер фиксируется при объявлении объекта bitset (итераторов нет, оптимизирован по размеру памяти)
  • basic_string - контейнер, предназначенный для хранения и обработки строк (хранит в памяти элементы подряд единым блоком, поэтому быстрый доступ ко всей последовательности)
  • valarray - контейнер для хранения числовых массивов и оптимизирован для достижения повышенной вычислительной производительности (чем-то похож на vector).

Итераторы

Язык C++ широко использует итераторы STL. Поддерживаются несколько различных типов итераторов: однонаправленные, двунаправленные и итераторы произвольного доступа.

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

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

Приведём пример итератора:

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

int main()
{
	vector<int> vec;
	vec.push_back(10);
	vec.push_back(20);
	vec.push_back(30);

	for (auto it = vec.begin(), end = vec.end(); it != end; ++it) {
		std::cout << *it << std::endl;
	}

	int i = 1;
	for (auto it = vec.begin(), end = vec.end(); it != end; ++it) {
		*it = i++; // присваиваем элементу значение переменной i
	}
	
	for (auto it = vec.begin(), end = vec.end(); it != end; ++it) {
		std::cout << *it << std::endl;
	}

	getchar();	

	return 0;
}

Остальные компоненты STL рассмотрим в следующий раз...


Отправить комментарий
Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Концепция SITEV.ru

SITEV.ru - это социальная сеть для ИТ-специалистов (программистов, дизайнеров, seo-специалистов, рекламных менеджеров, маркетологов), в том числе фрилансеров, бизнесменов... а также обычных пользователей, для которых и делается ИТ

Реклама


Поиск работы по всему миру