Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Список

Вектор.

Використання послідовних контейнерів

Алгоритми

Ітератори

Для всіх контейнерних класів STL визначений тип iterator. До основних операціям, виконуваним з будь-якими ітераторами, відносяться:

• Розіменування ітератора: якщо р — ітератор, те *р — значення об'єкта, на який він посилається.

• Присвоювання одного ітератора іншому.

• Порівняння ітераторів на рівність і нерівність (== і!=).

• Переміщення його по всіх елементах контейнера за допомогою префіксного (++р) або постфіксного (р++) инкремента.

операції ‘<’ і ‘>’ для ітераторів у загальному випадку не підтримуються. Для всіх контейнерних класів визначені уніфіковані методи begin() і end(), що повертають, first і last відповідно.

 

Алгоритм — це функція, яка робить деякі дії над елементами контейнера (контейнерів). Щоб використовувати узагальнені алгоритми, потрібно підключити до програми заголовний файл <algorithm>.

 

До основних послідовним контейнерам відносяться вектор (vector), список (list) і двостороння черга (deque).

Щоб використовувати послідовний контейнер, потрібно включити в програму відповідний заголовний файл:

#include <vector>

#include <list>

#include <deque>

using namespace std;

Контейнер вектор є аналогом звичайного масиву, за винятком того, що він при необхідності автоматично виділяє й звільняє пам'ять. Контейнер ефективно обробляє довільну вибірку елементів за допомогою операції індексації [ ] або методу at. Однак вставка елемента в будь-яку позицію, крім кінця вектора, неефективна. Для цього буде потрібно зрушити всі наступні елементи шляхом копіювання їх значень. По цій же причині неефективним є видалення будь-якого елемента, крім останнього.

Основні функції at, push_back, pop_back, empty, insert.

Контейнер список організує зберігання об'єктів у вигляді двузв’язного списку. Кожний елемент списку містить три поля: значення елемента, покажчик на попередній і покажчик на наступний елементи списку. Вставка й видалення працюють ефективно для будь-якої позиції елемента в списку. Однак список не підтримує довільного доступу до своїх елементів: наприклад, для вибірки n-го елемента потрібно послідовно вибрати попередні n-1 елементів. Має ті самі функції, що і вектор, та ще додаткові.

push_front, pop_front,sort – сортує відповідно дo operator<.

 

Існує п'ять способів визначити об'єкт для послідовного контейнера.

1. Створити порожній контейнер:

vector<int> vec1;

Iist<string> list1;

2. Створити контейнер заданого розміру й ініціалізувати його елементи значеннями за замовчуванням:

vector<string> vec1(100);

list<double> list1(20);

3.Створити контейнер заданого розміру й ініціалізувати його елементи зазначеним значенням:

vector<string> vec1(100,”Hello!”);

deque<int> dec(300, -1);

4. Створити контейнер і ініціалізувати його елементи значеннями діапазону (first, last) елементів іншого контейнера:

int агг[7] = {15, 2, 19, -3, 28, 6, 8};

vector<int> v1(arr, агг + 7);

Iist<int> lst(v1.beg() + 2, v1.end());

5. Створити контейнер і ініціалізувати його елементи значеннями елементів іншого однотипного контейнера:

vector<int> vl;

/ / додати в vl елементи

vector<int> v2(vl);

6. Для вставки й видалення останнього елемента контейнера кожного із трьох розглянутих класів призначені методи push_back() і рор_bаск(). Крім того, список і черга (але не вектор) підтримують операції вставки й видалення першого елемента контейнера push_front() і pop_front(). Враховуйте, що методи рор_bаск() і pop_front() не повертають вилучене значення.

// STL.cpp: Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <vector>

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

vector<int> v1(10);

cout<<"cap="<<v1.capacity();

v1.push_back(1);

v1.push_back(2);

v1.push_back(3);

int i=v1.size()-1;

cout<<"last="<<v1.at(i);

v1[0]=99;

v1.at(1)=88;

cout<<"\n0="<<v1[1]<<'\n';

system("pause");

v1.pop_back();

i=v1.size()-1;

cout<<"v1 last="<<v1.at(i);

system("pause");

return 0;

}

 

// 205206vec.cpp: Defines the entry point for the console application.

//

 

 

// 205206vec.cpp: Defines the entry point for the console application.

//

 

 

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

#include <set>

#include <list>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

vector<int> v1;

list<char> l;

int i;

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

v1.push_back(i);

v1.at(2)=22;

v1.at(5)=12;

v1.at(6)=1;

list<char>::iterator itrL=l.begin();

 

l.sort();

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

l.push_back(i);

set<int> s(v1.begin(),v1.end());

vector<int>::iterator itr=v1.begin();

itr++;itr++;

v1.insert(itr,99);

itr=v1.begin();

while(itr!=v1.end())

cout<<*itr++<<' ';

sort(v1.begin(),v1.end());

 

cout<<'\n';

 

set<int>::iterator itrS =s.begin();

while(itrS!=s.end())

cout<<*itrS++<<' ';

system("pause");

return 0;

}

 

// 205206vec.cpp: Defines the entry point for the console application.

//

 

 

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <algorithm>

#include <set>

#include <list>

using namespace std;

class Dot

{

int i;

public:

Dot(){}

Dot (int i1){i=i1;}

bool operator<(Dot &d)

{return i<d.i;}

void setI(int i1){i=i1;}

int getI(){return i;}

};

int _tmain(int argc, _TCHAR* argv[])

{

int i;

vector<int> v1;

vector<Dot> dd;

Dot d;

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

{

d.setI(i);

dd.push_back(d);

}

d.setI(87);

dd.at(3)=d;

 

vector<Dot>::iterator itrD=dd.begin();

sort(dd.begin(),dd.end());

cout<<'\n';

while(itrD!=dd.end())

{

cout<<itrD->getI()<<' ';itrD++;

}

cout<<'\n';

list<char> l;

 

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

v1.push_back(i);

v1.at(2)=22;

v1.at(5)=12;

v1.at(6)=1;

set<int> s(v1.begin(),v1.end());

vector<int>::iterator itr=v1.begin();

itr++;itr++;

v1.insert(itr,99);

itr=v1.begin();

while(itr!=v1.end())

cout<<*itr++<<' ';

sort(v1.begin(),v1.end());

 

cout<<'\n';

 

set<int>::iterator itrS =s.begin();

while(itrS!=s.end())

cout<<*itrS++<<' ';

system("pause");

return 0;

}

<== предыдущая лекция | следующая лекция ==>
Контейнери | Дитинство. Соціально-історичні детермінанти його тривалості та роль в загальному процесі формування особистості
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 277; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.