Работа с шаблонами и векторами

Шаблоны как определители функций, которые могут работать с разными типами данных. Определение именованных областей. Характеристика и количество элементов вектора. Использование методов, конструкторов и итераторов для создания и работы векторов.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 27.10.2010
Размер файла 18,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Работа с шаблонами и векторами

1. Шаблоны

Шаблоны позволяют определять функции, которые могут работать с разными типами данных. Шаблоны определяются следующим образом:

template <class идентификатор> определение функции;

template <typename идентификатор> определение функции;

Оба определения идентичны. Можно использовать как ключевое слово class, так и typename.

Например, в С+ можно создать перегруженную функцию вычисления модуля abs:

int abs(int n)

{return n < 0 ? -n : n;}

double abs(double n)

{return n < 0 ? -n : n;}

Используя шаблон, можно создать единственное определение, которое будет автоматически обрабатывать любой тип данных:

#include <stdio.h>

template <class T> T abs(T n)

{return n < 0 ? -n : n;}

void main (void)

{double d = abs(-4.55);

int i = abs(-7);

printf("%lf %d\n",d,i);}

Следующий шаблон вычисляет максимум двух чисел:

template <class Type> Type max (Type a, Type b)

{return (a > b ? a : b);}

Переменная Type может принимать любой тип. При вызове функции можно указывать явно тип, с которым она будет работать:

имя функции <тип> (параметры)

Функцию max можно вызвать следующим образом:

int i = max<int>(7,76);

Разнотиповые аргументы передавать функции max запрещается. Можно определить шаблон функции , которая может принимать разнотиповые приводимые аргументы:

template <class Type1, class Type2> Type1 max (Type1 a, Type2 b)

{return (a > b ? a : b);}

Тогда функцию max можно вызвать одним из следующих способов:

int i = max(7,76);

int i = max<int,long>(7,76);

2. Именованные области

namespace

Именованные области (namespace) позволяют объединять глобальные классы, объекты, функции под одним именем. Другими словами они позволяют разбивать глобальное пространство на области, в каждой из которых действуют свои объекты.

Определяются именованные области следующим образом:

namespace <идентификатор>

{<тело именованной области>}

Тело именованной области может содержать множество классов, объектов и функций. Например:

namespace ivan

{int a,b;}

Для доступа к элементам именованной области извне используется оператор расширения видимости. Например, для доступа к переменной a следует написать: ivan::a. Следующая программа создает две именованные области, каждая из которых содержит переменную. Переменные и функции из разных именованных областей могут иметь одинаковые имена.

#include <iostream.h>

namespace first

{int var = 5;}

namespace second

{double var = 3.1416;}

void main (void)

{cout << first::var << endl;

cout << second::var << endl;}

using namespace

Директива using позволяет ассоциировать текущее глобальное пространство объектов с именованной областью. После выполнения команды

using namespace <идентификатор>

можно напрямую иметь доступ ко всем объектам и функциям именованной области.

#include <iostream.h>

namespace first

{int var = 5;}

namespace second

{double var = 3.1416;}

void main (void)

{using namespace first;

cout << var << endl;}

{using namespace second;

cout << var << endl;}

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

3. Стандартная библиотека шаблонов stl

Стандартная библиотека шаблонов STL (standard template library) - это набор шаблонов функций и классов в языке С++, включающий в себя различные контейнеры данных (список, очередь, множество, отображение, хэш таблица, очередь с приоритетами) и базовые алгоритмы (сортировка, поиск).

Стандартная библиотека шаблонов является именованной областью с именем std. При ее использовании включаемые файлы пишутся без расширения .h, а к некоторым еще добавляется приставка c. Например, аналогом библиотек <stdio.h>, <limits.h> в STL будут <cstdio>, <climits>.

Для подключения стандартной библиотеки шаблонов следует воспользоваться директивой:

using namespace std;

Библиотека STL содержит пять основных видов компонентов:

1. алгоритм (algorithm): определяет вычислительную процедуру.

2. контейнер (container): управляет набором объектов в памяти.

3. итератор (iterator): обеспечивает для алгоритма средство доступа к содержимому контейнера.

4. функциональный объект (function object): инкапсулирует функцию в объекте для использования другими компонентами.

5. адаптер (adaptor): адаптирует компонент для обеспечения различного интерфейса.

Контейнерами называются часто встречающиеся способы организации данных: динамические массивы, списки, очереди, стеки.

Алгоритмы не являются частью контейнеров, а образуют отдельную подсистему. Но при этом почти любой алгоритм может применяться к почти любому контейнеру. Вызывая метод для некоторого алгоритма, мы вызываем этот метод сам по себе, а не для экземпляра некоторого класса. Контейнер же, к которому применяется алгоритм, передается в качестве параметра.

Итератор - это указатель, который может двигаться по элементам контейнера. Итераторы играют такую же роль, как индекс у элемента массива. Через индекс массива мы можем получить некоторый элемент массива, и через итератор мы можем получить некоторый элемент контейнера.

4. Векторы

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

Для использования векторов следует включить библиотеку:

#include <vector>

Для создания экземпляра вектора можно воспользоваться одним из следующих конструкторов:

конструктор

описание конструктора

vector()

создание пустого вектора

vector(size_type n)

создание вектора из n элементов

vector(size_type n, const T& t)

создание вектора из n копий t

vector(const vector&)

Копирующий конструктор

Пример 1. Рассмотрим работу конструкторов векторов на примерах.

Создание пустого вектора v (массива нулевой длины, не содержащего ни одного элемента):

vector<int> v;

Создание вектора v длины 10:

vector<int> v(10);

Создание вектора v длины 10, все элементы которого равны 5:

vector<int> v(10,5);

Пусть имеется массив чисел m. Для того чтобы создать вектор v, содержащий эти же числа, следует воспользоваться копирующим конструктором:

int m[] = {1,2,3,4,5};

vector<int> v(m,m+5);

Для создания еще одного вектора u с элементами 3, 4, 5 можно воспользоваться конструктором копированием интервала:

vector<int> u(&v[2],&v[5]);

Через reference будем обозначать тип “ссылка”. Следующие методы созданы для работы с вектором:

метод

описание метода

void clear()

удаление всех элементов. Вектор становится пустым

size_type size() const

вычисляет размер вектора

bool empty() const

возвращает истину, если вектор пустой

reference operator[](size_type n)

оператор индексирования, возвращает n-ый элемент вектора

reference front()

возвращает первый элемент вектора

reference back()

возвращает последний элемент вектора

Пример 2. Пусть имеется массив чисел m. Создадим вектор v, скопировав в него данные массива m.

int m[] = {1,2,3,4,5};

vector<int> v(m,m+5);

Выведем размер вектора:

printf("Size: %d\n",v.size());

Выведем первый и последний элементы вектора:

printf("First: %d, Last: %d\n",v.front(),v.back());

Выведем все элементы вектора, используя оператор индексирования:

for(int i=0;i<v.size();i++) printf("%d ",v[i]); printf("\n");

Следующая таблица описывает методы вставки и удаления элементов вектора:

метод

описание метода

void push_back(const T& x)

вставка элемента x в конец вектора

void pop_back()

удаление последнего элемента

Итератором называется указатель на объект. Создается итератор следующим образом:

имя_шаблона<тип>::iterator имя_итератора

Класс vector имеет следующие встроенные итераторы:

итератор

описание итератора

const_iterator begin() const

указатель на начало вектора

const_iterator end() const

указатель на конец вектора

Пример 3. Занесем в вектор v числа 4, 10, 1. Выведем элементы вектора v при помощи итератора iter.

vector<int> v;

vector<int>::iterator iter;

v.push_back(4); v.push_back(10); v.push_back(1);

for(iter=v.begin();iter!=v.end();iter++) printf("%d ",*iter); printf("\n");

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

метод

описание метода

iterator insert(iterator pos, const T& x)

вставка элемента x в позицию pos

iterator erase(iterator pos)

удаление элемента, на который указывает итератор pos

iterator erase(iterator first, iterator last)

удаление всех элементов, расположенных в промежутке [first..last]

Пример 4. Занесем в вектор v квадраты натуральных чисел от 1 до 10. Удалим из вектора значения 16, 25, 36, 49.

vector<int> v;

for(i=1;i<=10;i++) v.push_back(i*i);

for(i=0;i<v.size();i++) printf("%d ",v[i]); printf("\n");

v.erase(v.begin()+3,v.end()-3);

for(i=0;i<v.size();i++) printf("%d ",v[i]); printf("\n");


Подобные документы

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

    курсовая работа [828,8 K], добавлен 20.02.2011

  • Функции, позволяющие работать с базой данных MySQL средствами РНР. Соединение с сервером и его разрыв. Создание и выбор базы данных. Доступ к отдельному полю записи. Комплексное использование информационных функций. Запросы, отправляемые серверу MySQL.

    лекция [3,5 M], добавлен 27.04.2009

  • Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.

    контрольная работа [210,5 K], добавлен 25.03.2015

  • Создание классов, их реализация: формализация задачи, проектирование абстракции данных, определение семантики и определение отношений между классами. Реализация концепции контейнеров и итераторов с помощью языка объектно-ориентированного программирования.

    курсовая работа [175,5 K], добавлен 25.03.2015

  • Практика построения графиков с использованием функций и работа с мастером диаграмм в ПП Microsoft Excel. Применение встроенных функций работы с матрицами для решения системы линейных уравнений. Практика создания запросов при работе с базами данных.

    контрольная работа [436,1 K], добавлен 08.08.2011

  • Разработка и использование классов при создании приложений. Использование odbc-технологии для создания внешних представлений. Определение источника данных. Создание удаленного и независимого внешнего представления данных. Управление объектами Excel.

    лабораторная работа [413,9 K], добавлен 14.05.2011

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

    практическая работа [107,0 K], добавлен 05.12.2009

  • Использование ранжированных переменных в программном пакете Mathcad. Создание матриц без использования шаблонов матриц, описание операторов для работы с векторами и матрицами. Решение систем линейных и нелинейных уравнений с помощью функций Mathcad.

    контрольная работа [964,6 K], добавлен 06.03.2011

  • Порядок и особенности создания и работы с электронными таблицами Ехсеl, их возможности и преимущества. Методика создания базы данных прихода и реализации мобильных телефонов, использование функций для получения итоговых значений, формирование отчета.

    курсовая работа [4,5 M], добавлен 04.10.2009

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

    лекция [58,9 K], добавлен 21.07.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.