vectors stl
Улога вектора у СТЛ са примерима.
До сада смо у овој Ц ++ серији видели статичке низове који имају фиксну величину.
Ако у средини програма морамо да похранимо више елемената у низ, онда то постаје немогуће и сигурно ћемо добити изузетак ‘оут_оф_боунд’, оног тренутка када покушамо да сачувамо елементе изван граница низа.
Једно од решења за ово је декларисање низа са максималним капацитетом, тако да нећемо пронаћи проблем у складиштењу више елемената током извођења. Али овај аранжман има озбиљан недостатак у томе што трошимо превише меморије.
=> Овде погледајте комплетну серију обука за Ц ++.
Одговор на сва ова питања је коришћење динамичког низа који ће се сам ширити по потреби. СТЛ пружа овај динамички низ у облику векторског контејнера.
Шта ћете научити:
- Како дефинишемо векторе?
- Декларисање вектора у Ц ++ помоћу стд :: Вецтор Цласс
- Иницијализација вектора
- Вецтор Итератор
- Векторске функције
- Капацитет вектора
- Векторски модификатори
- 2Д Вецтор
- Пример вектора
- Закључак
- Препоручено читање
Како дефинишемо векторе?
Вектори су динамички контејнери низова којима се аутоматски мења величина када се елементи убаце или избришу. Складиштењем вектора управља сам векторски контејнер.
Елементи у вектору се чувају на суседним локацијама. Баш као низови, и векторским елементима се може прећи и приступити помоћу итератора.
Декларисање вектора у Ц ++ помоћу стд :: Вецтор Цласс
У СТЛ векторској класи „ стд :: вектор ’Дефинисано је под заглављем. Дакле, да бисмо користили векторски контејнер, требало би да укључимо ово заглавље у наш програм као што је приказано доле:
#include
Можемо прогласити празан вектор као што је приказано доле:
std::vector myvec;
Горња линија кода створиће вектор са елементима типа интегер. У знак сећања, ово ће бити постављено као мивец.
Иницијализација вектора
Можемо иницијализовати вектор са вредношћу у тренутку његовог декларисања.
најлакши начин да ИоуТубе претворите у мп3
То се ради на следећи начин:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
У горњем коду декларишемо вектор типа инт назван мивец који садржи првих пет елемената у Фибонаццијевој секвенци.
Изглед меморије овог вектора биће следећи:
Вецтор Итератор
Као што је већ поменуто, користимо итераторе за секвенцијално прелажење кроз вектор.
Вектори подржавају следеће функције итератора за пролазак кроз елементе:
- започети() - Враћа итератор који је упутио на први елемент векторског контејнера.
- крај() - Враћа итератор који показује на елемент који следи последњи елемент у вектору.
- рбегин () - Враћа обрнути итератор који показује на последњи елемент у векторском контејнеру.
- дати, пружити () - Враћа обрнути итератор који показује на први елемент векторског контејнера.
- цбегин () - Враћа константни итератор који показује на први елемент у векторском контејнеру.
- неколико() - Приказује константни итератор који показује на елемент који следи последњи елемент векторског контејнера.
- црбегин () - Даје повратни итератор константе који показује на последњи елемент у векторском контејнеру.
- цренд () - Враћа обрнути константни итератор који показује на први елемент у векторском контејнеру.
Погледајмо Пример који би демонстрирао ове функције итератора.Остале функције се могу користити слично.
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+1); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; cout << '
Output of Vector with rbegin and rend: '; for (auto itr = v1.rbegin(); itr != v1.rend(); ++itr) cout << *itr << ' '; cout << '
Output Vector of with cbegin and cend: '; for (auto itc = v1.cbegin(); itc != v1.cend(); ++itc) cout << *itc << ' '; cout << '
Output Vector of with crbegin and crend : '; for (auto icr = v1.crbegin(); icr != v1.crend(); ++icr) cout << *icr << ' '; return 0; }
Излаз:
Излаз вектора са почетком и крајем: 2 3 4 5 6
Излаз вектора са рбегин и ренд: 6 5 4 3 2
Излазни вектор са са цбегином и цендом: 2 3 4 5 6
Излазни вектор са црбегин и цренд: 6 5 4 3 2
Тако у овом коду декларишемо вектор и у њега убацујемо вредности помоћу функције пусх_бацк. Затим приказујемо векторе користећи сваку од функција итератора које смо горе описали. Као што видите из резултата, у зависности од кориштених функција итератора, редослед приказивања вектора се мења.
Векторске функције
Сортирање вектора
Можемо користити СТЛ алгоритме које смо већ видели на вектору.
Доље је дат пример коришћења „Сорт“ на вектору.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Излаз:
Оригинал Вецтор
10 50 30 20 60 40
Сортирани вектор
10 20 30 40 50 60
У горњем примеру, иницијализовали смо вектор, а затим применили алгоритам сортирања за сортирање вектора.
Штампање елемената вектора
Вектори се могу штампати помоћу итератора и „цоут“ тока. Помоћу итератора можемо проћи кроз сваки од векторских елемената и исписати их помоћу цоут.
Следећи пример показује ово:
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+2); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; }
Излаз:
Излаз вектора са почетком и крајем: 3 4 5 6 7
Капацитет вектора
Постоје разне функције које делују на векторе да би одредиле његову величину, максималну величину итд.
Функције наводимо као доле:
(и) Величина вектора
Величина функције () враћа број елемената у векторском контејнеру. Ово је уграђена функција стд :: вецтор класе и може се директно користити за проналажење величине вектора.
најбољи софтвер за праћење е-поште за гмаил
Погледајмо Пример вектора који користи функцију сизе ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Излаз:
Величина вектора: 6
У горњем програму смо дефинисали вектор мивец који се састоји од шест елемената. Даље, позивамо функцију сизе () на мивец и она приказује тачну величину.
(ии) Промена величине вектора
Вектору такође можемо променити величину на жељену величину тако да може да садржи ‘н’ број елемената. То се постиже функцијом ‘ресизе ()’ класе стд :: вецтор. Функција промене величине узима величину вектора као параметар, а затим величину контејнера вектора подешава на наведену величину.
Да схватимо ово помоћу примера.
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << '
Vector elements are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; myvec.resize(4); cout << '
Vector Size after resize: ' << myvec.size(); cout << '
Vector elements after resizing are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; return 0; }
Излаз:
Векторски елементи су: 1 1 2 3 5 8
Величина вектора након промене величине: 4
Векторски елементи након промене величине су: 1 1 2 3
У горњем програму, иницијално дефинишемо вектор мивец величине 6. Тада позивамо функцију промене величине на овом вектору величине = 4. То значи да сада желимо да променимо величину вектора на величину 4.
Након позива функције промене величине, поново исписујемо вектор. Видимо да када променимо величину вектора на величину 4, преостали елементи се одбацују и приказују се само 4 елемента вектора.
Поред функција величине и промене величине, векторска класа подржава и још неке функције које нам омогућавају да манипулишемо капацитетом вектора. Су:
- мак_сизе (): Враћа максималну величину, тј. Максималан број елемената које вектор може да садржи.
- капацитет (): Приказује величину тренутно додељеног простора за складиштење. То се враћа у смислу броја елемената.
- празно (): Проверава да ли је контејнер празан.
- смањити да стане(): Смањује векторски капацитет како би одговарао величини и одбацује све остале елементе.
- резерва (): Резервише векторски капацитет да садржи н елемената.
Векторски модификатори
Модификатори су операције или функције које се могу користити за модификовање садржаја векторског контејнера. Видећемо неке од главних функција које се користе као модификатори.
Додељивање нових вредности вектору
Једна од функција модификатора коју пружа стд :: вецтор је функција додељивања. Функција Додељи вектору додељује нове вредности заменом старих.
То је приказано у следећем примеру.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Излаз:
Елементи вектора: 10 10 10 10 10
У горњем коду декларишемо вектор типа инт. Затим позивамо да додијелимо функцију с параметрима 5, 10. То значи да намјеравамо елемент 10 додијелити вектору 5 пута. Када прикажемо вектор, видимо да вектор има 5 елемената, сви са вредношћу 5.
Брисање вектора
Следећа функција коју стд :: вецтор пружа за модификовање вектора је функција ‘брисање’. Функција брисања уклања елементе из наведеног опсега или положаја из вектора.
Погледајмо Пример функције брисања.
#include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5}; cout << '
Vector elements:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Излаз:
Елементи вектора: 1 1 2 3 5
Величина вектора након брисања: 4
Вектор након операције брисања: 1 2 3 5
Као што је приказано у горњем излазу за функцију промене величине, ми одређујемо опсег или положај елемента који треба избрисати или уклонити. У горњем примеру, одредили смо положај који показује на први елемент у вектору.
Уметни елементе у вектор
Векторска класа стд :: вецтор пружа још једну функцију за уметање вредности у вектор. Функција Уметање омогућава нам да уметнемо елементе у вектор пре назначене позиције.
То ће бити јасно из следећег примера.
#include #include using namespace std; int main() { // Assign vector vector myvec = {2,3,4}; cout << '
Initial vector: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning, 30 after that myvec.insert(myvec.begin(), 20); myvec.insert(myvec.begin()+1,30); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Излаз:
Почетни вектор: 2 3 4
Нови вектор након уметања: 20 30 2 3 4
Горњи програм у почетку декларише вектор са 3 елемента. Затим два пута позивамо функцију уметања да бисмо уметнули вредности 20 и 30 на прву и другу позицију у вектор. Затим приказујемо промењени вектор.
Замјена векторског садржаја
Класа вектора такође нам пружа могућност замене или размене садржаја једног вектора са садржајем другог вектора исте врсте и величине. То се постиже векторски уграђеном функцијом „свап“.
Размотрите следећи део кода.
#include #include using namespace std; int main() { // swap operation vector v1, v2; v1.push_back(1); v1.push_back(3); v2.push_back(5); v2.push_back(7); cout << '
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; // Swaps v1 and v2 v1.swap(v2); cout << '
After Swap
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; }
Излаз:
Вектор 1: 1 3
Вектор 2: 5 7
Афтер Свап
Вектор 1: 5 7
Вектор 2: 1 3
Горњи код приказује садржај два вектора пре и после замене.
Чишћење вредности у вектору
За разлику од уклањања једног или више елемената из вектора помоћу функције брисања, имамо још једну функцију „Цлеар“ која нам омогућава уклањање свих елемената у векторском контејнеру.
У доњем програму демонстрирамо јасну функцију векторског контејнера.
#include #include using namespace std; int main() { // swap operation vector v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); cout<<'
Size of vector v1: '< Излаз:
Величина вектора в1: 4
Вектор 1: 1 3 5 7
Величина вектора в1 након позива за брисање функције: 0
Овде прво декларишемо вектор, а затим гурамо елементе у њега. Једном када функцију позовемо цлеар (), видимо да се сви елементи у вектору уклањају одједном.
у (поз)
Ова функција враћа референцу на елемент на положају ‘поз’ унутар вектора.
Ово је једна од функција која се користи за приступ векторском елементу.
Пример је дат у наставку:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Излаз:
Елемент на положају 3: 3
Као што је приказано у примеру, функција „ат“ се користи за приступ елементу у вектору на наведеној позицији.
Фронт
Функција „фронт“ враћа референцу на први елемент вектора. Ово је још једна функција коју користимо за приступ елементима векторског контејнера.
Следећи пример приказује употребу функције „фронт“.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Излаз:
Улазни вектор: 1 1 2 3 5 8
Елемент на предњој страни вектора: 1
Назад
Слично функцији ‘фронт’, функција бацк користи се за приступ последњем елементу векторског контејнера. Функција „повратак“ враћа референцу на последњи елемент у векторском контејнеру.
Следећи пример приказује употребу функције „назад“.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Излаз:
Улазни вектор: 1 1 2 3 5 8
Елемент на задњој страни вектора: 8
Пронађи елемент у вектору
Функција „пронађи“ се користи за проналажење да ли је одређени елемент (који се назива кључ) присутан у вектору или не. Ова функција треба да буде брза и ефикасна. Једном када се вредност пронађе, функција се враћа.
Следећи пример приказује употребу функције проналажења.
#include #include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();itkey; if(find(myvec.begin(),myvec.end(),key)!= myvec.end()) cout<<'
Element found'; else cout<<'
Element not found'; }
Излаз:
Улазни вектор: 1 1 2 3 5 8
Унесите кључ за претрагу: 0
Елемент није пронађен
2Д Вецтор
Дводимензионални вектор је познат и као „вектор вектора“. Попут дводимензионалних низова, елементи дводимензионалних вектора такође су распоређени у матричном облику.
Пример програма за 2Д вектор је дат у наставку.
#include #include // for 2D vector using namespace std; int main() { // Initializing 2D vector 'odd_vect' with vector odd_vect{ { 1, 3, 5 }, { 7, 9, 11 }, { 13,15,17 } }; // Displaying the 2D vector cout<<'2D vector : '; cout< Излаз:
2Д вектор:
1 3 5
7 9 11
13 15 17
У горњем примеру обратите пажњу на начин на који је 2Д вектор дефинисан. Дефинисан је као вектор унутар другог вектора. Приказујући овај 2Д вектор, користимо исти приступ као и приказ 2Д низова.
Пример вектора
Доље је дат пример вектора који садржи већину векторских операција.
Питања и одговори за мс скл сервер интервју за искусне
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // push value 5 in myvec myvec.push_back(5); int n = myvec.size(); cout << '
The new vector after push_back:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // pop the element myvec.pop_back(); cout<<'
New vector after pop_back : '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning myvec.insert(myvec.begin(), 20); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Излаз:
Елементи вектора: 10 10 10 10 10
Нови вектор после пусх_бацк: 10 10 10 10 10 5
Нови вектор после поп_бацк: 10 10 10 10 10
Нови вектор након уметања: 20 10 10 10 10 10
Величина вектора након брисања: 5
Након брисања првог елемента: 10 10 10 10 10
Следи снимак екрана за исти.

У горњем примеру декларишемо вектор, а затим помоћу функција ассигн и пусх_бацк уносимо елементе у вектор. Затим користимо функцију поп_бацк за уклањање елемента са краја вектора. Након тога, поново додајемо један елемент у вектор помоћу уметнутог елемента, а затим бришемо елемент помоћу функције брисања.
Ово је пример с краја на крај векторског контејнера који демонстрира своје различите функције.
Закључак
Овим смо дошли до краја овог упутства о вектору.
У нашем предстојећем упутству сазнаћемо о контејнеру „листе“ СТЛ-а који је сличан линијама низова и вектора.
=> Овде погледајте савршен водич за обуку за Ц ++.
Препоручено читање