Бінарні файли прямого доступу 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Бінарні файли прямого доступу



#include <fstream.h>//бібліотека класів файлового потокового вводу-виводу#include <conio.h>#include <iostream.h>//структура для запису у бінарний файлstruct My{char C[20];int N;};//перевантажений оператор << для виводу вмісту структуриostream& operator<< (ostream &s, const My &x){return s << x.C << ";" << x.N;}void main(){My s1={"string 1",1};//перший екземплярMy s2={"string 2",2};//другий екземплярMy s3={"string 3",3};//третій екземплярMy s4={"string 4",4};//четвертий екземпляр//створити файловий об’єкт для потокового виводуofstream ofile("file.dat", ios::binary);//записати у файл екземпляри у вигляді рядків розміром Myofile.write((char*)&s1, sizeof(My));ofile.write((char*)&s2, sizeof(My));ofile.write((char*)&s3, sizeof(My));ofile.write((char*)&s4, sizeof(My));ofile.close();//закрити файл ofile//створити файловий об’єкт для потокового вводуifstream ifile("file.dat", ios::binary);//читати з файлу екземпляри у вигляді рядків розміром My поки не кінець файлуwhile (ifile.read((char*)&s1, sizeof(My)),!ifile.eof()){//якщо s1.C="string 2" вивести вміст екземпляраif (!strcmp(s1.C,"string 2")) cout<<s1<<endl;//виклик перевантаженого оператора <<}ifile.close();//закрити файл ifile//створити файловий об’єкт для потокового вводуifstream ifile2("file.dat", ios::binary);//установити позицію у файлі на третій запис від початкуifile2.seekg(sizeof(My)*2,ios::beg);ifile2.read((char*)&s1, sizeof(My));//читати дані//вивести вміст екземпляраcout<<s1<<endl;//виклик перевантаженого оператора <<ifile2.close();//закрити файл ifile2getch();//очікувати вводу з клавіатури}

3.35 Шаблон структури "пара" бібліотеки STL

#include <stdio.h>//шаблон структури pairtemplate <class T1, class T2>//список шаблонних параметрівstruct pair{T1 first;//поле типу T1T2 second;//поле типу T2//конструкториpair(){};pair(const T1& x,const T2& y):first(x), second(y){};};//шаблон перевантаженої операторної функції operator==template <class T1, class T2>//список шаблонних параметрівinline bool operator==(const pair<T1,T2>& x,const pair<T1,T2>& y){//повернути true, якщо поля рівніreturn x.first==y.first && x.second==y.second;};void main(){//спеціалізації структур (T1 є double, T2 є int)pair<double,int> obj1(2.1,3);//створити об’єкт obj1pair<double,int> obj2(2.1,3);//створити об’єкт obj2//використання перевантаженого оператора ==if (obj1==obj2) printf("obj1=obj2");}

Використання бібліотеки STL

#include <iostream.h>#include <vector>//бібліотека контейнера вектора#include <algorithm>//бібліотека функцій-алгоритмів#include <functional>//бібліотека функціональних об’єктів (функторів)//функціональний шаблонний клас addtemplate <typename T>class add{private:T x;public:add(T ix): x(ix) { }//конструкторvoid operator()(T i)//перевантажений оператор (){cout<<i+x<<" ";}};//функціональний шаблонний клас add2, //успадкований від функтора binary_functiontemplate <typename T>class add2: binary_function<T, T, T>{public:T operator()(T x, T y)//перевантажений оператор (){return x+y;}};//функція для виводу вмісту вектораvoid print(vector<int> &v){static int k=0;cout<<++k<<": ";//оголошено ітератор (вказівник на елементи вектора)vector<int>::iterator it;//в циклі ітератор указує з першого по останній елемент вектора//вивести значення елементуfor(it=v.begin(); it!=v.end(); it++) cout<<*it<<" ";cout<<endl;}void main(){vector<int> v(5);//оголосити контейнер-вектор розміром 5vector<int>::iterator it;//оголосити ітератор//приклад заповнення вектораint i;for(it=v.begin(),i=0; it!=v.end(); it++,i++) v[i]=1;print(v);//1-вивід вектора//приклад заповнення вектораfor(it=v.begin(); it!=v.end(); it++) *it=2;print(v);//2v.erase(v.begin(),v.end());//видалення усіх елементівprint(v);//3-вивід пустого вектора//приклад заповнення вектораfor(int i=0; i<5; i++) v.push_back(i);//добавляє в вектор іprint(v);//4v.erase(v.begin()+4);//видалення 5-го елементаprint(v);//5v.erase(v.begin()+1,v.begin()+3);//видалення 2 і 3-го елементівprint(v);//6cout<<v.max_size()<<endl;//максимальний розмір вектораcout<<v.size()<<endl;//розмір вектораv.insert(v.begin()+1,3,7);//вставка 7 в діапазон з індексами [1,3]print(v);//7v.pop_back();//видалення останнього елементаprint(v);//8//створити вектор v2 - копію vvector<int> v2(v.begin(), v.end());cout<<v2.empty()<<endl;//вивід логічного 0 (вектор не пустий)print(v2);//9//дописуємо в v вміст v2 з першого по передостанній елементv.assign(v2.begin(),v2.end()-1);print(v);//10//порівнюємо векториif (v==v2) cout<<"v=v2";else cout<<"v<>v2"<<endl;v2=v;//присвоюємо v2 вміст v//створення вектора з масивуint array [] = { 1, 3, 5, 7, 9};vector<int> v3 (array, array + 5);print(v3);//11//приклади застосування алгоритмів://кількість елементів менших 100cout<<count_if(v.begin(),v.end(),bind2nd(less<int>(),100))<<endl;add<int> f(2); //функтор (функціональний об’єкт)//для кожного елементу з діапазону застосувати ffor_each(v.begin(),v.end(),f);cout<<endl;//пошук першого числа < 3//застосування адаптера bind2nd і предиката lesscout<<*find_if(v.begin(),v.end(),bind2nd(less<int>(),3));cout<<endl;//копіювати діапазон v3 в vcopy(v3.begin(),v3.end(),v.begin());print(v);//12//замінити в діапазоні числа 5 на 13replace(v3.begin(),v3.end(),5,13);print(v3);//13//перемножити елементи v3[i]=v[i]*v2[i]//використовується стандартний функтор multipliestransform(v.begin(),v.end(),v2.begin(),v3.begin(),multiplies<int>());print(v3);//14//додати елементи v3[i]=v[i]+v2[i]//використовується функтор користувача add2transform(v.begin(),v.end(),v2.begin(),v3.begin(),add2<int>());print(v3);//15//сортувати v3 по зростаннюsort(v3.begin(),v3.end());print(v3);//16//сортувати v3 по спаданнюsort(v3.begin(),v3.end(),greater<int>());print(v3);//17//заповнити v3 числами 7fill(v3.begin(),v3.end(),7);print(v3);//18v2.clear();//очистити вектор v2}


Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 199; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.27.202 (0.004 с.)