Zaochniki / 11_stl
.pdfПример использования контейнера list
#i n c l u d e |
< l i s t > |
#i n c l u d e |
<i o s t r e a m > |
using |
namespace |
s t d ; |
|
|||
i n t main ( ) |
|
|
|
|
||
{ |
|
|
|
|
|
|
l i s t <int > a ; |
|
|
|
|||
a . push_back ( 5 0 ) ; a . p u s h _ f r o n t ( 1 0 ) ; |
a . push_back ( 5 ) ; |
|||||
l i s t <int > : : i t e r a t o r i = a . b e g i n ( ) ; |
|
|||||
++i ; |
|
i |
= 7; |
|
|
|
a . i n s e r t ( |
i , |
500 |
) ; |
|
||
i = |
a . end ( ) ; i ; |
|
|
|||
a . i n s e r t ( |
i , |
100 |
) ; |
|
||
c o u t << a . s i z e ( ) << e n d l ; // 5 |
|
|||||
a . pop_back ( ) ; |
// |
s i z e = 4 |
|
|||
f o r ( |
i |
= |
a . b e g i n ( ) ; i !=a . end ( ) ; ++i |
) |
||
c o u t << i << ' ' ; |
|
|||||
cout |
<< e n d l ; |
|
|
|
||
|
|
|
|
|
|
|
return |
0 ; |
|
|
|
|
|
} |
|
|
|
|
|
|
STL
Другие последовательные контейнеры
Также используются:
deque дек аналогичен vector, плюс возможность быстрых операций с началом
( push_front, pop_front ).
stack стек (LIFO), обычно сделан из list. queue очередь (FIFO).
priority_queue очередь с приоритетами.
STL
Ассоциативные контейнеры
Позволяет создавать контейнеры, для доступа к элементам которых может использоваться ключ объект произвольного типа, для которого существует оператор <.
#i n c l u d e <map>
#i n c l u d e <i o s t r e a m >
using |
namespace s t d ; |
|
|
|
|
|
|
|
|
|
|
|
i n t main ( ) |
|
|
|
|
|
|
|
|
|
|
||
{ |
|
|
|
|
|
|
|
|
|
|
|
|
map<s t r i n g , int > m; |
|
|
|
|
|
|
|
|
|
|
||
m[ " Vasya " ] = 5 0 ; |
|
|
|
|
|
|
|
|
|
|
||
m[ " Katya " ] = 1 0 0 ; |
|
|
|
|
|
|
|
|
|
|
||
cout << m[ " Vasya " ] |
<< ' |
' << m[ " Katya " ] ; |
||||||||||
map<s t r i n g , int >:: i t e r a t o r |
i ; |
|
|
|
|
|
|
|
||||
f o r ( |
i |
= m. b e g i n ( ) ; |
i !=m. end ( ) ; ++i ; |
) |
|
|
|
|||||
cout |
<< i > f i r s t |
<< ' |
' |
i >second |
<< e n d l ; |
|||||||
return |
0 ; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STL
Специальный контейнер для строк basic_string
Для работы со строками в C++ следует использовать string специализацию шаблона basic_string для обычных символов. Помимо функций, обычных для контейнеров, в н¼м реализовано большинство функций, необходимых для строк.
#i n c l u d e |
<s t r i n g > |
#i n c l u d e |
<i o s t r e a m > |
|
|
using namespace |
s t d ; |
|
|
|
|
|
|
|
|
|
|
||
i n t main ( ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
s t r i n g |
a , |
b = |
" Vasya " , c |
= |
b ; |
||||||||
a = " Katya " ; |
|
|
|
|
|
|
|
|
|
|
|
||
a += ' ! ' ; |
c = a + b ; |
|
|
|
|
|
|
|
|
|
|
||
c += " |
. . . . " ; |
|
|
|
|
|
|
|
|
|
|
|
|
cout << a << |
' ' << b << |
' |
' << c << e n d l ; |
||||||||||
cout << c . l e n g t h ( ) ; |
|
|
|
|
|
|
|
|
|
|
|||
const |
char |
s |
= a . c _ str ( ) ; |
|
|
|
|
|
|
|
|
|
|
return |
0 ; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STL
Пример без использования string
c l a s s Stud |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
p u b l i c : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Stud ( const |
char aname , |
i n t |
anz |
) ; |
|
|
|
|
|
|
|
|
|
||||
Stud ( const Stud &r ) ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
~Stud ( ) |
|
{ d e l e t e [ ] name } ; |
// . . . . . . . . . . . . |
|
|
|
|
|
|
||||||||
p r i v a t e : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i n t nz ; |
|
char |
name ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Stud : : Stud ( |
const char |
aname , |
i n t |
anz ) |
|||||||||||||
: nz ( anz ) , |
name ( new |
char [ s t r l e n ( aname )+1] ) |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s t r c p y ( |
name , |
aname |
) ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Stud : : Stud ( |
const Stud |
&r |
) |
|
|
|
|
|
|
|
|
|
|
|
|
||
: nz ( r . nz ) , name ( new |
char [ s t r l e n ( r . name )+1] ) |
||||||||||||||||
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s t r c p y ( |
name , |
r . name |
) ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STL
Пример с использованием string
c l a s s Stud |
{ |
|
|
|
|
|
p u b l i c : |
|
|
|
|
|
|
Stud ( const s t r i n g |
&aname , |
i n t |
anz |
) ; // . . . |
||
p r i v a t e : |
|
|
|
|
|
|
i n t nz ; |
s t r i n g |
name ; |
|
|
|
|
} |
|
|
|
|
|
|
Stud : : Stud ( |
const |
char |
aname , |
i n t |
anz |
) |
: nz ( anz ) , name ( aname )
{
}
STL
Алгоритмы
Для работы с данными используется множество абстрактных алгоритмов:
for_each выполнить действия для каждого элемента в контейнере;
nd найти элемент по значению;nd_if найти элемент по условию;
sort сортировка; copy копирование
transform изменение; assign присвоение; count подсч¼т . . .
Всего порядка 60 алгоритмов. Большинство в качестве аргументов требуют итераторы и функции/функторы.
STL
Ввод/вывод
Для ввода/вывода используется целая иерархия шаблонов и их специализаций. Объекты типа ostream предназначены для вывода, istream для ввода, iostream для ввода и вывода. Это абстрактные классы (специализации шаблонов), так как для них не задано, с чем будет происходить обмен данными. Для работы с файлами используются ofstream, ifstream, fstream. При выходе объекта за пределы области видимости закрытие файлов происходит автоматически.
Для работы со строками используются ostringstream, istringstream, stringstream.
Для всех фундаментальных типов определены операторы >> для ввода и << для вывода. Для пользовательских типов можно определить самим. Управлять потоком позволяют манипуляторы.
STL
Пример использования потоков ввода/вывода
#i n c l u d e <f s t r e a m > |
|
#i n c l u d e |
<s t r i n g > |
|
|
#i n c l u d e |
<iomanip > |
|
|
using namespace |
s t d ; |
|
i n t main ( ) |
|
|
{ |
|
|
i n t a ; double |
b ; char |
c ; s t r i n g s ; |
i f s t r e a m i s ( " i n _ f i l e . t x t " ) ; |
||
|
|
|
i s >> a >> b >> c >> |
s ; |
o f s t r e a m os ( " o u t _ f i l e . t x t " ) ;
os << w i d t h ( 1 0 ) << a << p r e c i s i o n ( 4 ) << b << c << ' ' << s << e n d l ;
return 0 ;
}
STL
Средства обработки ошибок
Для сигнализации об ошибках в STL используются исключения. Базовым классом для всех ошибок STL является exception. От него наследуются
length_error недопустимая длина; domain_error недопустимое входное значение; invalid_argument неправильный аргумент;
bad_alloc ошибка выделения памяти; out_of_range недопустимый индекс . . .
STL