
- •Int main(){
- •Void unsetf( fmtflags флаги );
- •Int main(){
- •0 False
- •Iostream& manip_name (iostream& stream){
- •If (stream.Rdstate() & ios::eofbit)…
- •Istrea& putback( char ch );
- •Int main()
- •If (!f.Is_open()) return 1;
- •Istream& getline (char* buf, streamsize num);
- •Istream& getline (char* buf, streamsize num, char delim);
- •Int_type peek();
- •Istream& read(char* buf, streamsize num);
- •Istream& seekg( off_type offset, seekdir origin);
- •Istream& seekg( pos_type pos);
- •Istrstream::istrstream( const char* buf);
- •Istrstream::istrstream( const char* buf, streamsize size);
- •Int main(){
- •Int main(){
- •Istrstream si(s);
- •Int count;
- •Void reset(int n)
- •Int main()
- •Int main()
- •Int main(){
- •Int main(){
- •Int main () {
- •V.Push_back ((char*) "zippy");
- •V.Push_back ((char*) "motorboy");
- •Int main () {
Int main(){
map < char, int > m;
// Вставка с помощью конструктора pair
for (int i = 0; i < 5; ++i )
m.insert( pair<char, int>( 'A' + i, 65 + i);
// Вставка с помощью ффункции make_pair
for (int i = 5 ; i < 10; ++i)
m.insert(make_pair((char)('A'+i), 65 + i);
map<char, int>::iterator mi;
for (mi = m.begin(); mi != m.end(); ++mi)
cout << (*mi).first << ':' << (*mi).second << ' ';
return 0;
}
Класс set.
set - это ассоциативный контейнер, который поддерживает уникальные ключи (не содержит ключи с одинаковыми значениями) и обеспечивает быстрый поиск ключей.
Associative containers are containers especially designed to be efficient accessing its elements by their key (unlike sequence containers, which are more efficient accessing elements by their relative or absolute position).
Internally, the elements in a set are always sorted from lower to higher following a specific strict weak ordering criterion set on container construction.
Sets are typically implemented as binary search trees.
Therefore, the main characteristics of set as an associative container are:
Unique element values: no two elements in the set can compare equal to each other. For a similar associative container allowing for multiple equivalent elements, see multiset.
The element value is the key itself. For a similar associative container where elements are accessed using a key, but map to a value different than this key, see map.
Elements follow a strict weak ordering at all times.
This container class supports bidirectional iterators.
//
#include <iostream>
#include <set>
using namespace std;
int main ()
{
set<int> myset;
set<int>::iterator it;
pair<set<int>::iterator,bool> ret;
// set some initial values:
for (int i=1; i<=5; i++) myset.insert(i*10); // set: 10 20 30 40 50
ret = myset.insert(20); // no new element inserted
if (ret.second==false) it=ret.first; // "it" now points to element 20
myset.insert (it,25); // max efficiency inserting
myset.insert (it,24); // max efficiency inserting
myset.insert (it,26); // no max efficiency inserting
int myints[]= {5,10,15}; // 10 already in set, not inserted
myset.insert (myints,myints+3);
cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); it++)
cout << " " << *it;
cout << endl;
return 0;
}
// =============
myset contains: 5 10 15 20 24 25 26 30 40 50
// =============
/* multiset и multimap - то же самое, только с повторяющимися ключами */
3.29
Алгоритмы STL
Алгоритмы
Алгоритм-функция-манипулятор (инициализация, сортировки, поиска и т.п.), которая работает с элементами некоторого контейнера.
Некоторые алгоритмы можно применять к диапазону элементов, находящихся в контейнере.
Диапазон-последовательность целочисленных индексов элементов, допускающих произвольный доступ.
Алгоритмы инициализации
Fill,fill_n-заполнение диапазона заданным значением
Generate, generate_n-заполнение диапазона фунцией-генератора
Copy-копирование элементов диапазона
Copy_backward-копирование элементов диапазона в обратном порядке
Merge, inplace_merge-объединение двух упорядоченных последовательностей элементов в одну
Replace,replace_copy,replace_if,replace_copy_if-замена элементов диапазона.
Reverse, reverse_copy-реверсирование диапазона элементов
Swap,swap_ranges,iter_swap-обмен местами элементов
Rotate,rotate_copy-циклическая перестановка элементов
Next_permutation,prev_permutaton-формирование перестановок элементов последовательности
Random,shuffle-перетасовка
Remove,remove_if,remove_copy,remove_copy_if-удаление элементов диапазона
Unique,unique_copy-удаление дубликатов из заданного диапазона
Алгоритмы сортировки
Sort,partial_sort,partial_sort_copy,stable_sort-упорядочивание диапазона
Partition,stable_partition-упорядочивание диапазона элементов так, чтобы все элементы удовлетворяющие заданному условию, предшествовали всем остальным элементам.
Make_heap,pop_heap,push_heap,sort_heap-рабоота с «кучей»(предоставление для priority_queue)
Алгоритмы поиска
Adjacent_find-поиск пары совпадающих элементов
Find,find_end,find_first_of, find_if-поиск вхождения элементов
Binary_search-бинарный поиск в упорядоченной последовательности
Includes-проверка вхождения одной последовательности в другую
Search,search_n-поиск подпоследовательности
Lower_bound,upper_bound-определенгие элемента границы по заданному значению
Mismatch-поиск первого несовпадения двух последовательностей
Max_element, min_element-поиск элемента последовательности
Equalсравнение последовательностей
Equal_range-определение диапазона для вставки элементов без нарушения порядка последовательности
Lexicographical_compare-лексикографическое сравнение двух последовательностей
Min,max-сравнение двух элементов
Математически алгоритмы
Count-число элементов последовательности
Count_if-число элементов по заданному условию
Trancsorm-преобразование элементов диапазона
For_each-применение функции к диапазону элементов
Операции над множествами
Set_difference-выделение несовпадающих элементов двух последовательностей
Set_intersection-выделение совпадающих элементов двух последовательностей
Set_symmetric_difference-выделение симметричной разности двух последовательностей
set_union-объединение двух последовательностей
#include <iostream>
#include <conio.h>
#include <algorithm>
#include <vector>
using namespace std;
template<class T>
void show(vector<T> &v)
{
vector<T>::iterator vi;
for(vi=v.begin(); vi!=v.end(); vi++)
cout<<*vi<<" ";
cout<<endl;
}
char coder (char c)
{
return (c+1);
}
bool sort_predicate(char c1,char c2)
{
return (c1>c2);
}
int main()
{
vector<char> v;
vector<char>::iterator vi;
for(int i=1;i<10;i++)
v.push_back((char)(60+rand()%30));
show(v);
cout<<"count of 'N'"<<count(v.begin(),v.end(),'N')<<endl;
replace_copy(v.begin(),v.end(),v.begin(),'0',':');
show(v);
vi=remove_copy(v.begin(),v.end(),v.begin(),':');
v.erase(vi,v.end());
show(v);
reverse(v.begin(),v.end());
show(v);
vi=unique(v.begin(),v.end());
v.erase(vi,v.end());
show(v);
transform(v.begin(),v.end(),v.begin(),coder);
show(v);
sort(v.begin(),v.end(),sort_predicate);
show(v);
vi=find(v.begin(),v.end(),'Z');
if(vi!=v.end())cout<<"find"<<*vi<<endl;
fflush(stdin);
getch();
return 0;
}
3.30
Итераторы
Итератор-объект, похожий на указатель и предназначенный для перемещения по содержимому контейнера (аналогично перемещению указателя по элементам массива).
Особенности:
Итераторы объявляются в различных контейнерах
Итераторы можно увеличивать, уменьшать, разыменовывать.
Основные виды итераторов
Итератор произвольного доступа - чтение и запись элементов путём произвольного доступа
Двунаправленный итератор - чтение и запись элементов путём перемещения вперёд или назад
Прямой итератор - чтение и запись элементов путём перемещения только вперёд.
Итератор ввода - только чтение элементов путём перемещения только вперёд
Итератор вывода - только запись элементов путём перемещения только вперёд
Итераторы, обладающие более широкими возможностями, можно использовать вместо более слабых итераторов.
void print (const vector<const char*>& v_) {
vector<const char*>::const_iterator i;
for (i = v_.begin (); i != v_.end (); i++)
cout << *i << endl;
}