Работа с шаблонами и векторами
Шаблоны как определители функций, которые могут работать с разными типами данных. Определение именованных областей. Характеристика и количество элементов вектора. Использование методов, конструкторов и итераторов для создания и работы векторов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 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.2009AutoCAD как одна из самых популярных графических систем автоматизированного проектирования, круг выполняемых ею задач и функций. Технология автоматизированного проектирования и методика создания чертежей в системе AutoCAD. Создание и работа с шаблонами.
лекция [58,9 K], добавлен 21.07.2009