Использование контейнера list для реверса последовательности элементов 


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



ЗНАЕТЕ ЛИ ВЫ?

Использование контейнера list для реверса последовательности элементов



#include <list>

 

int main()

{

int j;

 

list<int> theList;

list<int>::iterator iter1;

list<int>::iterator iter2;

 

for(j=2; j<16; j+=2) //заполнение списка: 2, 4, 6,...

theList.push_back(j);

 

cout << "Before reversal: "; //вывод списка

for(iter1 =theList.begin(); iter1!= theList.end(); iter1++)

cout << *iter1 << " ";

 

iter1 = theList.begin(); //адрес первого элемента

iter2 = theList.end(); //адрес элемента, следующего за последним

--iter2; //адрес последнего элемента

 

while(iter1!= iter2)

{

swap(*iter1, *iter2); //поменять первый и последний элементы

++iter1; //перейти к следующему

if(iter1==iter2) //если адреса равны

break;

--iter2; //перейти к предыдущему элементу

}

 

cout << "\nAfter reversal: "; // вывод списка

for(iter1 =theList.begin(); iter1!= theList.end(); iter1++)

cout << *iter1 << " ";

cout << endl;

_getch();

return 0;

}

Демонстрация обратного итератора

#include <list>

 

int main()

{

int arr[] = { 2, 4, 6, 8, 10 };

list<int> theList; //создание списка

 

for(int j=0; j<5; j++) //преобразование массива в список

theList.push_back(arr[j]);

 

list<int>:: reverse_iterator revit; // обратный iterator

 

revit = theList. rbegin(); //начинаем просмотр с конца списка

while(revit!= theList.rend())

cout << *revit++ << ' ';

cout << endl;

_getch();

return 0;

}

 

Использование алгоритма find()для поиска заданного числа

#include <algorithm>

#include <list>

 

int main()

{

list<int> theList(5); // empty list holds 5 ints

list<int>::iterator iter; // iterator

int data = 0;

// fill list with data

for(iter = theList.begin(); iter!= theList.end(); iter++)

*iter = data += 2; //занесение в список чисел 2, 4, 6, 8, 10

 

iter = find (theList.begin(), theList.end(), 8); //поиск числа 8

if(iter!= theList.end())

cout << "\nFound 8.\n";

else

cout << "\nDid not find 8.\n";

_getch();

return 0;

}

 

 

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

Используем для формирования последовательности чисел контейнер list вместо контейнера vector путем простой замены слова vector на list. Так как алгоритм sort применяется только для тех контейнеров, которые обеспечивают произвольный доступ к элементам, то список этому требованию не удовлетворяет и поэтому класс list содержитметод sort(), решающий задачу сортировки. Изменим, в соответствии с прототипом, вызов метода сортировки:

 

#include < list >

#include < fstream >

 

int main() {

ifstream in ("inpnum.txt");

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

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

int x;

while (in >>x) v.push_back(x); //ввод чисел из файла в список

list<int>::const_iterator i;

for (i =v.begin(); i!=v.end(); i++) //список до сортировки

cout << *i << " ";

cout << "\n";

V.sort(); //void sort();

 

for (i =v.begin(); i!=v.end(); i++) //список после сортировки

cout << *i << " ";

cout << endl;

_getch();

return 0;

}

 

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

Используем для формирования последовательности строк контейнер list вместо контейнера vector путем простой замены слова vector на list. Так как алгоритм sort применяется только для тех контейнеров, которые обеспечивают произвольный доступ к элементам, то список этому требованию не удовлетворяет и поэтому класс list содержитметод sort(), решающий задачу сортировки. Изменим, в соответствии с прототипом, вызов метода сортировки:

 

#include < list >

#include < fstream >

 

int main() {

ifstream in ("inpnum.txt");

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

 

list<string> sl; //создаем пустой список из строк

string s;

list<string>::const_iterator i;

 

while (in >> s) sl.push_back(s); //ввод строк из файла в список

 

for (i =sl.begin(); i!=sl.end(); i++) //список до сортировки

cout << *i << " ";

cout << "\n";

sl.sort(); //void sort();

for (i =sl.begin(); i!=sl.end(); i++) //список после сортировки

cout << *i << " ";

cout << endl;

_getch();

return 0;

}

 



Поделиться:


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

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