КАТЕГОРИИ: Архитектура-(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; Просмотров: 295; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |