|
|||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Двумерный вектор
Двумерный вектор создается с помощью тех же конструкторов. Например,
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
Для достижения гибкости и машинонезависимости любой объект, помещаемый в список, должен иметь конструктор по умолчанию. Кроме того, в нем должен быть определен оператор "<" и, возможно, другие операторы сравнения. Точные требования, предъявляемые к объектам, зависят от конкретного компилятора. Рассмотрим пример, иллюстрирующий основные операции над списками. // Основные операции над списками,
#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++) Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |