C++ за 21 день седьмое издание



Download 1,38 Mb.
bet306/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   302   303   304   305   306   307   308   309   ...   437
Bog'liq
word1

template ctypename T>




  1. void DisplayContents (const T& Input)



6 : {



  1. for (auto iElement = Input.cbegin() // auto и cbegin: C++11



8: ; iElement != Input.cend()


9: ; ++ iElement )


10: cout « *iElement « ' ';
1 1 :

  1. cout « endl;




  1. }



14:



  1. int main ()




  1. {




  1. std::list listlntegers;



18


19listlntegers.push_front (10);


20listlntegers.push_front (2011);


21listlntegers.push_back (-1);

Основные операции со списком

427



:2 listIntegers.push_back (9999);



  1. DisplayContents(listlntegers);




    1. return 0;

}


Результат


2011 10 -1 9999


Анализ

Строки 19-22 демонстрирую т применение методов p u s h _ f r o n t () и p u s h _ b a c k (). Значение, переданное как аргумент методу p u s h _ f r o n t (), вставляется в первую позицию списка, а переданное методу p u sh _ b a c k () — в последнюю . Вывод отображает содержи­ мое списка (при помощи обобщенного шаблона функции D is p la y C o n te n ts ()), демон­ стрируя, что элементы хранятся не в порядке вставки.





ВНИМАНИЕ!

Возникла ошибка компиляции при использовании ключевого




слова auto?










Функция DisplayContents () в листинге 18.2 использует ключевое слово




С++11 auto для определения типа итератора в строке 7. Кроме того, она ис­




пользует возвращающие итератор

const_iterator функции cbeginO и




cend(), которые совместимы только со стандартом C++11.




В этом и последующих примерах для компиляции с использованием компиля­




тора, не совместимого со стандартом С++11, необходимо заменить ключевое




слово auto явным типом.







Так, функцию DisplayContents () для устаревшего компилятора следует из­




менить, как показано ниже.







template ctypename Т>







void DisplayContents (const T& Input)




{

(T::const_iterator iElement = Input.begin ()




for







; iElement != Input.end ()







; ++

iElement )

'




cout

cout «

*iElement «




« endl;







}










ПРИМЕЧАНИЕ

Функция DisplayContents () в строках 4-13 листинга 18.2 является более




обобщенной версией метода DisplayVector () из листинга 17.6 (обратите




внимание на измененный список параметров). Хотя последний работал только

для вектора, обобщение типа хранимых в нем элементов обеспечивает дей­ ствительно обобщенную версию даже для контейнеров разных типов.


Вы можете вызвать версию метода DisplayContents () из листинга 18.2 с вектором или списком в качестве аргумента, и он будет работать прекрасно.


428 ЗАНЯТИЕ 18. Классы двухсвязного иодносвязного списков библиотеки ST-




Вставка в середину списка

Контейнер s t d : : l i s t характеризуется возможностью вставки элементов в середин) коллекции за постоянное время. Для этого применяется его функция-член i n s e r t ().


Функция i n s e r t () класса l i s t доступна в трех формах.


Форма 1




iterator insert(iterator pos, const T& x)

Здесь функция i n s e r t () получает позицию вставки как первый параметр и вставляе­ мое значение как второй. Эта функция возвращает итератор, указывающий на элемент, только что вставленный в список.


Форма 2


void insert(iterator pos, size_type n, const T& x)

Эта функция получает позицию вставки как первый параметр, вставляемое значение как последний параметр и количество элементов в переменной п.


Форма 3




template


void insert(iterator pos, Inputlterator f, Inputlterator 1)

Эта перегруженная версия — шаблон функции, который получает кроме позиции два итератора ввода, отмечающие границы вставляемой в список коллекции. Обратите вни­ мание: входной тип, I n p u t l t e r a t o r , — параметрический тип шаблона, а потому мо­ жет указать на границы любой коллекции, будь то массив, вектор или другой список.


В листинге 18.3 показано применение этих перегруженных версий функции l i s t : : i n s e r t ().



  1. И СТ И Н Г 1 8 .3 . Различные способы вставки элементов в список____________________________




    1. #include




    1. #include




    1. using namespace std;



3:



  1. template




  1. void DisplayContents (const T& Input)



6 : {

  1. for (auto iElement = Input.cbegin() // auto и cbegin: C++11




  1. ; iElement != Input.cend()




  1. ; ++ iElement )



10: cout « *iElement « '
1 1 :

  1. cout « endl;




  1. }



14:



  1. int main ()




  1. {




  1. list listlntegersl;



18


19// Вставка элементов в начало...


20listlntegersl.insert (listlntegersl.begin (), 2);

Основные операции со списком

429



listlntegersl.insert (listlntegersl.begin (), 1);



  1. Вставка элементов в конец...



listlntegersl.insert (listlntegersl.end (), 3);


cout « "The contents of list 1 after inserting elements:"



  1. endl;



DisplayContents (listlntegersl);




  1. list listlntegers2;

•О


    1. Вставка 4 элементов с одинаковым значением 0...



22 Iistlntegers2.insert (listlntegers2.begin (), 4, 0) ;



23

cout

«

"The contents of list 2

after inserting




24

a value:"

2 5

cout

«

listlntegers2.size () «

"' elements of







«

endl;







2 6 DisplayContents (listlntegers2) ;
2*7



  1. list listlntegers3;

29


  1. // Вставка элементов из другого списка в начало...




  1. Iistlntegers3.insert (listlntegers3.begin (),



42 listlntegersl.begin (), listlntegersl.end ());


43



  1. cout « "The contents of list 3 after inserting the contents of";




  1. cout « "list 1 at the beginning:" « endl;




  1. DisplayContents (listlntegers3);



47



  1. // Вставка элементов из другого списка в конец...




  1. Iistlntegers3.insert (listlntegers3.end (),



50 listlntegers2.begin (), listlntegers2.end ());


51



  1. cout « "The contents of list 3 after inserting ";




  1. cout « "the contents of list 2 at the beginning:" « endl;




  1. DisplayContents (listlntegers3);

55


  1. return 0;







Результат



The

contents

of

list

1

after inserting elements:







1 2

3




of

list

2

after inserting '4'

elements of a value:

The

contents

0

0

0

0










after inserting the

contents of list

1

at the beginning:

The contents of list 3

1 2

3













after inserting the

contents of list

2

at the beginning:

The contents of list 3

1 2

3

0000



















430 ЗАНЯТИЕ 18. Классы двухсвязного иодносвязного списков библиотеки ST.




Анализ

Функции-члены b e g in () и e n d () возвращ ают итераторы, указывающ ие на начал;





  1. конец списка соответственно. Это справедливо для всех контейнеров STL, включа* s t d : : l i s t . Его функция i n s e r t () получает итератор, отмечающий позицию, перед ю> торой должны быть вставлены элементы. Используемый в строке 24 итератор, возвращае­ мый функцией e n d (), указывает на позицию после последнего элемента в списке. П оэто му эта строка вставляет целочисленное значение 3 перед концом, как последнее значение В строке 32 список инициализируется четырьмя помещенными в начало элементами сс значением 0. Строки 41 и 42 демонстрируют применение функции l i s t : : i n s e r t () дл* вставки элементов из одного списка в конец другого. Хотя в этом примере вставляете* список целых чисел в другой список, вставлен может быть также диапазон из вектора, определяемый методами b e g in () и e n d (), как в листинге 18.1, или обычного статиче­ ского массива.




Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   302   303   304   305   306   307   308   309   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish