Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Zaochniki / 11_stl

.pdf
Скачиваний:
6
Добавлен:
13.02.2016
Размер:
229.94 Кб
Скачать

Пример использования контейнера 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

Соседние файлы в папке Zaochniki