Контейнерите , алгоритмите и итераторите работят заедно . Най – добрия начин да разберете това е да видите пример . Следващата програма демонстрира контейнера vector . vector е подобен на масив . Обаче той има предимство че автоматично манипулира свойте размери за съхраняване , нараствайки ако е необходимо . vector предоставя методи за да можете да определите размера му и да добавяте или премахвате елементи . Следващата програма демонстрира използването на класа vector :
// къс пример демонстриращ vector
# include < iostream >
#include < vector >
using namespace std ;
int main ( )
{
vector < int > v ; // създава vector с нулева дължина int i ;
// показва първоначалната дължина на v
cout << “ size = “ << v . size ( ) << endl ;
/* поставя стойности към края на v –
vector ще нарасне ако е необходимо */
for ( i = 0 ; i < 10 ; i ++ ) v . push_back ( i ) ;
// показва текущата дължина на v
cout << “ size now = “ << v . size ( ) << endl ;
// можеме да достъпваме съдържанието на vector
// чрез индекс
for ( i = 0 ; i < 10 ; i ++ ) cout << v [ i ] << “ “ ;
cout << endl ;
// можеме да достъпваме първия и последния елемент
cout << “ front = “ << v . front ( ) << endl ;
cout << “ back = “ << v . back ( ) << endl ;
// достъп чрез итератор
vector < int > : : iterator p = v . begin ( ) ;
while ( p != v . end ( ) ) {
cout << * p << “ “ ;
p++ ;
}
return 0 ;
}
Изхода от тази програма е :
size = 0
size now = 10
0 1 2 3 4 5 6 7 8 9
front = 0
back = 9
0 1 2 3 4 5 6 7 8 9
В тази програма вектора е първоначално създаден с нулева дължина . Член функцията push_back ( ) слага стойности в края на вектора , увеличавайки размера му ако е необходимо . Функцията size ( ) показва размера на вектора . Вектора може да бъде индексиран като нормален масив . Също може да бъде достъпван чрез итератор . Функцията begin ( ) връща итератор към началото на вектора . Функцията end ( ) връща итератор към края на вектора . От друга страна : Забележете как е деклариран итератора p . Типа iterator е дефиниран за няколко контейнерни класа .
Контейнерни класове
Контейнерите дефинирани от STL са показани тук :
Контейнер Описание Изискван хедър
bitset Множество от битове < bitset >
deque Опашка с два края < deque >
list Линеен списък < list >
map Съхранява двойки < map >
ключ / стойност в
които на един ключ
могат да отговарят две
или повече стойности
multimap Съхранява двойки < map >
ключ / стойност в
които на един ключ
могат да отговарят две
или повече стойности
multiset Множество в което всеки < set >
елемент не е необходимо
да е уникален
priority_queue Опашка с приоритети < queue >
queue Опашка < queue >
set Множество в което < set >
всеки елемент е уникален
stack Стек < stack >
vector Динамичен масив < list >
Класа string който управлява символните низове е също контейнер но е обсъден в Глава 15 . Всеки от контейнерите е обобщен в следващите секции . Понеже контейнерите са изпълнени чрез шаблонни класове се използват различни типове съхранители на данни . В описанията , общия тип Т представя типа на данните съхранявани от контейнера , а Size представя някакъв целочислен тип . Понеже имената на съхранителните типове в шаблонен клас са произволни , контейнерините класове декларират typedef версии на тези типове . Това прави имената на типовете конкретни . Някой от най – общите typedef имена са показани тук :
size_type Някакъв целочислен тип
eквивалентен на size_t
reference Псевдоним на елемент
const_reference const псевдоним на
елемент
iterator Итератор
const_iterator const итератор
reverse_iterator Обратен итератор const_reverse_iterator const обратен итератор value_type Тип на стойността
съхранявана в контейнер
allocator_type Типа на алокатора
key_type Типа на ключа
key_compare Типа на функцията която
сравнява два ключа
value_compare Типа на функцията която
сравнява две стойности
Сподели с приятели: |