АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Двумерный вектор

Читайте также:
  1. A) векторы прерывания
  2. Берг С. Классический цигун для женщин. Полный курс за 10 уроков. – СПб. : Вектор, 2014. – 160 с. – (Здоровье на все 100)
  3. Ввод векторов и матриц.
  4. Вектор електричного зміщення. Диференціальне формулювання теореми Остроградського-Гаусса для поля в діелектриках.
  5. Вектор намагнічування і його зв’язок з молекулярними струмами
  6. Вектор напруженості магнітного поля та вектор магнітної індукції.
  7. Вектор поляризації
  8. Вектор скорости
  9. Вектор, содержащий объекты класса
  10. Векторная алгебра.
  11. Векторная графика
  12. Векторное произведение векторов

 

Двумерный вектор создается с помощью тех же конструкторов. Например,

 

vector<vector<int> > matrix;

 

Некоторые компиляторы не позволяют использовать двойной символ >>, но разрешают его применение через пробел.

Пример.

 

#include"stdafx.h"

#include <vector>#include <iostream> using std::vector;using std::cout; void function(vector<vector<int>> &dvec){ for(int i = 0; i < 10; i++) { vector<int> vec; //создается новый вектор for(int j = 0; j < 10; j++) vec.push_back(i); //который заполняется числами dvec.push_back(vec);заполняется переданный вектор }} int main(){ vector<vector<int>> dvec; function(dvec);//функция инициализации//далее вывод на экран for(int i = 0; i < dvec.size(); i++) { for(int j = 0; j < dvec[i].size(); j++) cout << dvec[i][j] << " "; cout << "\n"; } system("pause"); return 0;}

 

 

Шаблонная функция print() для вывода содержимого контейнера

 

#include"stdafx.h"

#include <iostream>

#include <vector>

#include <windows.h>

#include <cctype>

using namespace std;

template <class T> void print(T& cont){

typename T::const_iterator p=cont.begin();

If(cont.empty())

cout<<"Container is empty";

for(p; p!=cont.end(); ++p)

cout<<*p<< ' ';

cout<<endl;

}

// const_iterator можно заменить на iterator

int main(){

vector<char> v(10);

for(int i=0; i<10; i++) v[i] = i + 'a';

print(v);

vector<string> v2(1, "<Vector>");

print(v2);

system("pause");

return 0;

}

Списки

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

 

template <class T, class Allocator = allocator<T> > class list

 

Здесь шаблонный параметр Т задает тип данных, хранящихся в списке. Распределитель памяти задается классом Allocator, причем по умолчанию используется стандартный механизм распределения памяти. Класс list имеет следующие конструкторы.

 

explicit list(const Allocator &a = Allocator());

explicit list(size_type num, const T &val = T(),const Allocator &n = Allocator());

list(const list<T,Allocator> &ob);

template <class InIter>list(InIter start), InIter end, const Allocator &a = Allocator());

 

Первая версия конструктора создает пустой список.

Вторая — список, состоящий из пит элементов, имеющих значение val, причем это значение можно задавать по умолчанию.

Третий вариант конструктора создает список, содержащий элемент объекта оb.

Четвертая версия конструктора формирует список, состоящий из элементов, лежащих в диапазоне, заданном итераторами start и end.

В классе list определены следующие операторы сравнения:

 

==, <, <=,!=, >, >=

 

Наиболее важные функции-члены, определенные в классе list, перечислены в табл. 3. Как и в классе vector, функция push_back() записывает значение в конец списка. Для вставки нового элемента в начало списка предназначена функция push_front(). С помощью функции insert() значение можно записать в середину списка. Два списка можно объединить, вызвав функцию aplice(). Кроме того, с помощью функции merged() один список можно внедрить в другой.

Таблица 3. Функции, определенные в классе list

Функция-член   Описание
reference_back(); const_reference back() const;   Возвращает ссылку на последний элемент списка
iterator begin(); const iterator begin() const;   Возвращает иторатор. установленный на первый элемент списка
void clear();   Удаляет из списка все элементы
bool anpty() const;   Возвращает значение true, если список пуст, в противном случае возвращает значение false  
iterator end() const_iterator end() const;   Возвращает итератор, установленный на первый элемент списка
iterator erase (iterator i);   Удаляет элемент, yа который ссылается итератор i. Возвращает итератор, установленный на элемент, следующий за удаленным
iterator erase(iterator start, iterator end);   Удаляет элементы из диапазона, заданного итераторами start и end. Возвращает итератор, установленный на элемент, следующий за последним удаленным
reference front(); const_reference front() coast;   Возвращает ссылку на первый элемент списка  
iterator insert(iterator i, const T &val);   Вставляет элемент valперед элементом, на который ссылается итератор i. Возвращает итератор, установленный на элемент val
void insert(iterator i, size_type num, const т &val);   Вставляет nam копий элемента valперед элементом, на который ссылается итератор i
template <class inIter> void insert (iterator i, InIter start, InIter end);   Вставляет перед элементом, на который ссылается итератор i, последовательность элементов, заданную итератора ми start и end
void marge (list<T,Allocator> &ob); template <сlаss Comp> void merge (list<T, Allocator> &ob,Comp cmpfn);   Внедряет упорядоченный список, содержащийся в объекте ob, в заданный список. В результате возникает упорядоченный список. После внедрения список, содержащийся в объекте ob, становится пустым. Вторая версия функции merge получает в качестве параметра функцию, позволяющую сравнивать элементы списка между собой  
void pop_back (); Удаляет последний элемента списка
void pop_front();   Удаляет первый элемент списка
void push_back(const T val);   Добавляет элемент valв конец списка
void push_front(const т &val);   Добавляет элемент val в начало списка
void remove(const т &val);   Удаляет из списка элементы, значение которых равно val
void reverse(); Меняет порядок следования элементов списка на противоположный
size_type size() const; Возвращает текущее количество элементов вектора
void sort(); template <class Comp> void sort(Comp cmpfn); Упорядочивает список. Вторая версия упорядочивает список, используя для сравнения элементов функцию cmpfn  
void splice (iterator i,list<T,Allocator> &оb); Вставляет в позицию, указанную итератором i, содержимое объекта ob. После выполнения операции список obстановится пустым
void aplice(iterator i, list<T,Allocator> &ob, iterator el); Элемент, на который ссылается итератор el, удаляется из списка obи вставляется в вызывающий список в позицию, заданную итератором i
void splice (iterator i, list<T, Allocator> &ob, iterator start, iterator еnd); Элементы списка ob, расположенные в диапазоне, заданном итераторами start и end, удаляются из списка ob и вставляются в вызывающий список а позицию, заданную итератором i  

 

 

Для достижения гибкости и машинонезависимости любой объект, помещаемый в список, должен иметь конструктор по умолчанию. Кроме того, в нем должен быть определен оператор "<" и, возможно, другие операторы сравнения. Точные требования, предъявляемые к объектам, зависят от конкретного компилятора.

Рассмотрим пример, иллюстрирующий основные операции над списками.

// Основные операции над списками,

 

#include <iostream>

#include <list>

#include <windows.h>

using namespace std;

int main(){

list<int> lst; // Создаем пустой список типа int.

int i;

SetConsoleOutputCP(1251);

for(i=0; i<10; i++)


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)