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



ЗНАЕТЕ ЛИ ВЫ?

Использование контейнера list и потокового итератора при выводе последовательности структур на экран

Поиск

Используем для формирования последовательности структур с информацией о студентах контейнер list. Для сортировки списка используем метод sort().

 

// stud.h

struct stud

{

char name[70];

unsigned num_kurs;

float ball;

 

};

 

// stdafx.h

#pragma once

 

 

#define WIN32_LEAN_AND_MEAN //Exclude rarely-used stuff from Windows headers

#include <stdio.h>

#include <tchar.h>

 

// TODO: reference additional headers your program requires here

 

#include <iostream>

#include <ostream>

#include <string.h>

#include <conio.h>

#include <list>

#include <algorithm>

#include "stud.h"

using namespace std;

 

 

// main.cpp

#include "stdafx.h"

 

bool operator< (stud first,stud second)

{

return (strcmp(first.name,second.name)< 0);

}

 

ostream& operator<< (ostream& out, const stud& s)

{

out<<" name: "<<s.name<<endl;

out<<" num kurs: "<<s.num_kurs;

out<<" ball: "<<s.ball;

out<<"\n++++++++++++++++++++++++++++++++++++++++++++\n\n";

return out;

}

void PrintList(const list<stud> &l)

{

cout<<"List:";

copy(l.begin(),l.end(),ostream_iterator<stud>(cout," "));

}

 

Int main()

{

list <stud> db1,db2;

cout<<"input a number of students: ";

int n;

cin>>n;

stud buf;

for (int i=0;i<n;i++) //заполнение списка

{

cout<<" name: ";

cin>>buf.name;

cout<<" num of kurs: ";

cin>>buf.num_kurs;

cout<<" ball: ";

cin>>buf.ball;

cout<<"------------------------------------------\n";

db1.push_back(buf); //заполнение списка

};

cout << endl << endl;

 

PrintList(db1); //вывод списка

cout<< "size = " << db1.size() << endl;

cout << endl << endl;

 

db1.sort(); //сортировка списка

PrintList(db1);

cout << endl << endl;

 

cout << "\ninput min ball: ";

unsigned p;

cin>>p;

 

list<stud>::iterator i;

 

for (i=db1.begin();i!=db1.end();i++)

if (i->ball < p)

{

db2.push_back(*i); //формирование списка
//с заданным значением поля ball

}

PrintList(db2); //вывод сформированного списка

cout << endl << endl;

cout << endl << endl;

//вывод исходного списка

for (i=db1.begin();i!=db1.end();i++) //равносильно PrintList(db1);

cout<<*i;

_getch();

return 0;

}

 

Использование адаптера stack при считывании чисел из файла

В соответствии со своим назначением стек не только не позволяет выполнить произвольный доступ к своим элементам, но даже не дает возможности пошагового перемещения, в связи с чем, концепция итераторов в стеке не поддерживается. Для считывания значения на вершине стека используется метод top().

Специализированные последовательные контейнеры – стек, очередь, очередь с приоритетами – называются адаптерами контейнеров, т.к. реализованы на основе рассмотренных выше классов.

 

Интерфейс класса stack сформирован из методов класса-прототипа deque:

методы класса stack методы класса-прототипа deque
push() push_back()
pop() pop_back()
top() back()
empty() empty()
size() size()

 

Пример работы со стеком. Программа вводит числа из файла и выводит их на экран в обратном порядке:

 

#include < stack >

#include < fstream >

int main() {

ifstream in ("inpnum.txt");

if (!in) {cerr << "File not found\n"; exit(1);}

stack <int> s; //создаем пустой контейнер-стек

int x;

while (in >> x) s.push(x); //читать число из файла и добавить в стек

 

while(!s.empty()) { //true, если пусто

cout << s.top() << " ";

s.pop(); //удалить из стека

}

cout << endl;

_getch();

return 0;

}

 

Вычисление числа объектов с заданным значением

#include <algorithm> //for count()

 

int arr[] = { 33, 22, 33, 44, 33, 55, 66, 77 };

 

int main()

{

int n = count(arr, arr+8, 33); //подсчет в массиве количества чисел=33

cout << "There are " << n << " 33's in arr." << endl;

return 0;

}

 

Поиск первого объекта с заданным значением

#include <algorithm> //for find()

 

int arr[] = { 11, 22, 33, 44, 55, 66, 77, 88 };

 

int main()

{

int* ptr;

ptr = find(arr, arr+8, 33); //find first 33

cout << "First object with value 33 found at offset "

<< (ptr-arr+1) << endl;

_getch();

return 0;

}

 



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 243; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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