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



Download 1,38 Mb.
bet293/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   289   290   291   292   293   294   295   296   ...   437
Bog'liq
word1

#include




  1. #include




  1. using namespace std;








  1. void DisplayVector(const vector& veclnput)




  1. {




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




  1. ; iElement != veclnput.cend() // cend() только C++11




  1. ; ++ iElement )



9: cout « *iElement « '
1 0 :

  1. cout « endl;



12: }





  1. int main ()




  1. {




  1. // Создать экземпляр вектора с 4 элементами,




      1. инициализированными значением 90




    1. vector veclntegers (4, 90);



18:



  1. cout « "The initial contents of the vector: ";




  1. DisplayVector(veclntegers);

2 1 :

  1. // Вставить 25 в начало




  1. veclntegers.insert (veclntegers.begin (), 25);








  1. // Вставить в конец 2 числа со значением 45




  1. veclntegers.insert (veclntegers.end (), 2, 45);








  1. cout « "Vector after inserting elements at beginning and end: ";




  1. DisplayVector(veclntegers);








  1. // Другой вектор, содержащий два элемента со значением 30




  1. vector vecAnother (2, 30);



33:



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




  1. veclntegers.insert (veclntegers.begin () +1,




  1. vecAnother.begin (), vecAnother.end ());



37:



  1. cout « "Vector after inserting contents from another vector: ";




  1. cout « "in the middle:" « endl;




  1. DisplayVector(veclntegers);



41:



  1. return 0;




  1. }

Типичные операции с вектором

411



Результат


The initial contents of the vector: 90 90 90 90


Vector after inserting elements at beginning and end: 25 90 90 90 90 45 45


Vector after inserting contents from another vector: in the middle:


25 30 30 90 90 90 90 45 45


Анализ

Этот код демонстрирует мощь функции i n s e r t (), позволяющей помещать значения в середину контейнера. Вектор в строке 17 содержит четыре элемента, которые инициали­ зированы значением 90. Взяв этот вектор за отправную точку, используем различные пере­ груженные версии функции-члена v e c t o r :: i n s e r t (). В строке 23 один элемент добавля­ ется в начало. В строке 26 используется перегруженная версия, добавляющая в конец два элемента со значением 45. Строка 35 демонстрирует возможность вставки элементов из одного вектора в середину другого (в этом примере во вторую позицию со смещением 1).


Хотя метод v e c t o r :: i n s e r t () весьма универсален, для добавления элементов в век­ тор предпочтительней использовать метод p u sh _ b a c k ().


Обратите внимание, что метод i n s e r t () — неэффективный способ добавления элементов





  1. вектор (при добавлении в позицию, отличную от конца последовательности), поскольку до­ бавление элементов в начало или середину вектора сдвигает все последующие элементы назад (после создания места для последних в конце). Таким образом, в зависимости от типа объек­ тов, содержавшихся в последовательности, продолжительность этой операции сдвига может оказаться существенной с точки зрения вызова конструктора копий или оператора присвое­ ния копии. В данном примере вектор содержит объекты типа i n t , перемещение которых осу­ ществляется относительно быстро. Однако в других случаях все могло бы быть вовсе не так.

Если у вашего контейнера должны быть очень частые вставки в середину, име­ ет смысл использовать класс s td : : l i s t , рассматриваемый на занятии 18, "Классы двухсвязного и односвязного списков библиотеки STL”.




ВНИМАНИЕ! Используете ли вы устаревший компилятор C++?

Функция DisplayVector () в листинге 17.3 использует ключевое слово C++И auto для определения типа итератора в строке 6. В этом примере и далее для компиляции с использованием компилятора, не совместимого со стандартом С++11, необходимо заменить ключевое слово auto явным типом,



  1. данном случае типом vector:: const_iterator.

Так, функция DisplayVector () для устаревшего компилятора должна быть изменена следующим образом:





Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   289   290   291   292   293   294   295   296   ...   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