Vector in C++ STL in Hindi

C++ STL के इस Hindi Tutorial में हम Vector के बारे में बात करेंगे और C++ STL Vector को और उसके functions को कैसे use करते हैं ये सीखेंगे. 

C++ STL Vectors एक sequence containers है और ये लगभग C++ Arrays की तरह ही होता है बस इनमें फर्क ये होता है की vectors का size dynamic होता है और इसका मतलब ये है की जब आप vectors में element add या delete करते हो तब ये container खुद को अपने आप resize कर लेता है.

Vector container भी array की तरह similar data types के elements को contiguous memory में store करता है और इसके elements को आप array की तरह index की help से access कर सकते हो और इसके अलावा iterator की हेल्प से भी access कर सकते हो.


C++ STL Vector Declaration

अब जैसा की आपको पता है Vector, C++ Standard Template Library का part है इसलिए इसे use करने के लिए सबसे पहले आपको vector header file को अपने program में include करना होगा. 

#include <vector>

Header file include करने के बाद आप vector को declare कर सकते हो और इसका syntax आप नीचे देख सकते हो और जैसा की मैं आपको इससे पहले के tutorial ही बता चुका हूँ की STL में सभी containers templates के तौर पर use होते हैं इसलिए vector declare करते वक्त आपको उसका type parameter बताना होगा.

vector<T> vector_name;

आप vector declare करते वक्त type parameter में जो data type specify करोगे सिर्फ उसी type का data आप vector container में store कर सकते हो.

vector<int> v1;
vector<char> v2;
vector<string> v3;

C++ STL Vector Initialization

Vector container में data store करने के दो तरीके होते हैं एक आप खुद vector declaration के वक्त ही उसे initialize कर सकते हो और दूसरा प्रोग्राम run होते वक्त user से कीबोर्ड के जरिये इनपुट ले सकते हो.

अभी हम ये देखने वाले हैं की आप खुद से कैसे और कितने तरीकों से vector initialization कर सकते हो. मैंने नीचे सभी syntax को explain किया हुआ है.

// First Way: Initializer list
vector<int> v1 = {1, 2, 3, 4, 5};
// Second Way: Uniform initialization
vector<int> v2 {1, 2, 3, 4, 5};
// Third Way: Size, Value Fill
vector<int> v3(4, 7);
// Fourth Way: Size with 0 values
vector<int> v4(5);

First और second way तो simple तरीका है. Third way में हमने 4 size का एक vector declare किया है जिसकी सभी चारो values 7 होगी. Fourth way में हमने 5 size का Vector declare किया है जिसकी सभी पाँचों values 0 होगी.

Example Program:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> data = {24,85,60,35,94};

    for(int i=0;i<data.size();i++)
    {
        cout<<data[i]<<" ";
    }

    return 0;
}

Output:

24 85 60 35 94

आपने ऊपर program में देखा की मैंने vector elements को print करने के लिए array की तरह for loop और index का use किया लेकिन ऐसा आप सभी STL containers के साथ नहीं कर सकते और ये तरीका सही भी नही है.

STL containers के elements पर traverse करने यानी उन्हें access करने के लिए हम use करते हैं STL Iterators का इसलिए मैं आपको suggestion (warning) दूंगा की पहले आप link पर click करके Iterators वाले tutorial को पढ़िए उसके बाद ही इस tutorial को आगे continue कीजियेगा. 


C++ STL Vector Functions

Vector container class में बहुत सारे member functions होते हैं जिसकी लिस्ट नीचे दी है इन सभी functions को 4 categories में बांटा गया है और हम एक-एक करके इन सभी categories के functions को use करना सीखेंगे.

begin() end()
rbegin() rend()
size() resize()
empty() at()
front() back()
push_back() pop_back()
insert() assign()
erase() clear()
swap()

Vector Iterator Functions:

इन functions की हेल्प से आप vector container के different element के iterator को get कर सकते हो.

begin() function

ये function vector container के first element के address को return करता है जिसे आप किसी iterator में store कर सकते हो.

end() function

ये function vector container के last element के बाद वाले address को return करता है जिसे आप किसी iterator में store कर सकते हो.

rbegin() function

ये function vector container के last element के address को return करता है जिसे आप किसी iterator में store कर सकते हो और फिर आप चाहो तो आप इस iterator से reverse order में traverse कर सकते हो.

rend() function

ये function vector container के first element से पहले वाले address को return करता है जिसे आप किसी iterator में store कर सकते हो.

Example Program:

#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main()
{
    vector<int> v = {30,25,40,10,85,60,35,90};

    cout<<"Print Vector Element in  Forward Order:-"<<endl;
    for(auto it = v.begin(); it < v.end(); it++)
    {
        cout<<*it<<" ";
    }

    cout<<"\nPrint Vector Element in  Reverse Order:-"<<endl;
    for(auto it = v.rbegin(); it < v.rend(); it++)
    {
        cout<<*it<<" ";
    }

    return 0;
}

Output:

Print Vector Element in  Forward Order:-
30 25 40 10 85 60 35 90
Print Vector Element in  Reverse Order:-
90 35 60 85 10 40 25 30

Vector Capacity Functions:

इन functions की हेल्प से आप vector container के size पता लगा सकते हो और उसके साइज़ को बदल भी सकते हो.

size() function

ये function एक number return करता है जो की ये बताता है की vector में कितने elements store हैं.

resize(size) / resize(size,ele) function

इस function की help से आप vector को resize कर सकते हो. अगर आप इस function के argument में current size से कम size pass कर सकते हो तो ये function पास किये गये size के बाद वाले elements को remove कर देता है.

अगर आप इस function के argument में current size से ज्यादा size pass करते हो तो ये function पास किये गये size के बाद 0 value की copies या second argument में बताये गये element की copies से fill करके resize कर देगा.

empty() function

अगर आपका vector खाली है यानी उसमें कोई भी element store नही है तो ये function 1 (true) return करेगा और अगर vector में एक भी element है तो ये function 0 (false) return करेगा.

Example Program:

#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main()
{
    vector<int> v = {30,25,40,10,85,60,35,90};

    cout<<"Vector Size: "<<v.size();

    v.resize(5);

    cout<<"\nVector Elements After Resize:-"<<endl;
    for(auto it = v.begin(); it < v.end(); it++)
    {
        cout<<*it<<" ";
    }

    v.resize(10,5);

    cout<<"\nVector Elements After Resize:-"<<endl;
    for(auto it = v.begin(); it < v.end(); it++)
    {
        cout<<*it<<" ";
    }

    if(v.empty())
        cout<<"\nVector is Empty"<<endl;
    else
        cout<<"\nVector is Not Empty"<<endl;

    return 0;
}

Output:

Vector Size: 8

Vector Elements After Resize:-
30 25 40 10 85

Vector Elements After Resize:-
30 25 40 10 85 5 5 5 5 5

Vector is Not Empty

Vector Element Access Functions:

इन functions की हेल्प से आप vector container के elements को access कर सकते हो.

front() function

ये function vector container का first element return करता है.

back() function

ये function vector container का last element return करता है.

Operator [ ] 

आप array की तरह vector container के साथ भी square bracket [ ] का use element access कर सकते हो. इस [ ] में आपको एक index pass करना होता है और ये operator उस specified index (position) में मौजूद element return करता है.

इसके अलावा अगर आप [ ] operator में ऐसा index pass करते हैं जो valid नहीं है तो ये function कोई भी garbage value return कर देगा.  

at(index) function

ये function लगभग [ ] operator की तरह ही होता है बस इसे फर्क ये है की अगर आप इस function में कोई ऐसा index pass करते हैं जो valid नहीं है तो ये function exception throws करता है.

Example Program:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v = {30,25,40,10,85,60,35,90};

    cout<<"First Element: "<<v.front()<<endl;

    cout<<"Last Element: "<<v.back()<<endl;

    cout<<"Specified Index Element: "<<v[4]<<endl;

    cout<<"Specified Index Element: "<<v.at(5)<<endl;

    return 0;
}

Output:

First Element: 30
Last Element: 90
Specified Index Element: 85
Specified Index Element: 60

Vector Modifiers Functions:

इन functions की हेल्प से आप अपने vector container में new elements add कर सकते हो, vector के elements को remove कर सकते हो और उन्हें update कर सकते हो.

void push_back(ele) function 

इस function की help से आप vector के last (end) में element add (insert) कर सकते हो.

void pop_back() function

इस function की help से आप vector के last (end) से element remove (delete) कर सकते हो.

Example Program:

#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main()
{
    vector<int> v = {30,25,40,10,85,60};

    //add two elements at the end of the vector
    v.push_back(35);
    v.push_back(90);

    //loop to display vector elements
    for(int ele : v)
        cout<<ele<<" ";

    cout<<endl;

    //delete an element from the end of the vector
    v.pop_back();

    //loop to display vector elements
    for(int ele : v)
        cout<<ele<<" ";

    return 0;
}

Output:

30 25 40 10 85 60 35 90
30 25 40 10 85 60 35

Explanation:

Program की शुरुआत में हमने 6 elements के साथ एक vector initialize किया है उसके बाद push_back() function की help से 2 elements को add करके vector को print कराया है.

इसे बाद pop_back() function की help से एक element को remove करके vector को एक बार फिर print कराया है. 


Vector insert() functions

Vector में insert() function 3 तरह overload है यानी इसे हम 3 तरीकों से call कर सकते हैं और हर तरीके में ये function अलग तरह से काम करता है.

insert(iterator, element) function

जब आपको vector में single element किसी भी position पर insert करना हो तब हम इस function को use करते हैं.

आप जिस vector container के object से इस function को call करोगे उसी vector container का iterator आपको इस function में first argument के तौर पर pass करना होगा. 

इस function के second parameter में आप जो element (value) आप pass करोगे वो element उस iterator वाली position से just पहले add हो जायेगा.

insert(iterator, times, element) function 

जब आपको vector में single element किसी भी position पर एक से ज्यादा times copies (insert) करना हो तब हम इस function को use करते हैं.

आप जिस vector container के object से इस function को call करोगे उसी vector container का iterator आपको इस function में first argument के तौर पर pass करना होगा.

इस function के second function में आप जो number पास करोगे उतनी बार (times), third parameter में पास की गया element (value) उस iterator वाली position पर insert (copy) हो जायेगा. 

insert(iterator, start_iterator, end_iterator) function

इस function की help से आप एक vector में किसी दुसरे container के elements copy (insert) कर सकते हो.

आप जिस vector container के object से इस function को call करोगे उसी vector container का iterator आपको इस function में first argument के तौर पर pass करना होगा. इसी iterator position से पहले सभी elements copy होंगे.

आप जिस दुसरे container से elements copy करना चाहते हो उस container से copy करने वाले से elements का starting iterator और ending iterator को आपको इस function के second और third arguments के तौर पर pass करना होगा.

Return Value: ऊपर के दोनों insert() functions कुछ भी return नहीं करते लेकिन ये insert() function एक iterator return करता है जिसके पास newly inserted elements का starting address होगा.    

Example Program:

#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main()
{
    vector<int> v1 = {25,35,45,55,65};
    vector<int> v2 = {10,20,30};

    //insert element at first first position
    auto it1 = v1.begin();
    v1.insert(it1,75);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    cout<<endl;

    //insert element at first 4th position
    auto it2 = v1.begin();
    advance(it2,3);
    v1.insert(it2,85);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    cout<<endl;

    v1.insert(it2,3,90);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    cout<<endl;

    advance(it2,3);

    auto itx = v2.begin();
    auto ity = v2.end();

    v1.insert(it2,itx,ity);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    return 0;
}

Output:

75 25 35 45 55 65
75 25 35 85 45 55 65
75 25 35 90 90 90 85 45 55 65
75 25 35 90 90 90 10 20 30 85 45 55 65

Explanation:

ऊपर example program में हमने vector v1 में ही elements को insert किया है. 

सबसे पहले लाइन 11 पर हमने vector v1 की starting position का iterator get किया और फिर लाइन 12 पर insert function की help से iterator position से पहले यानी vector के starting में element को add किया है. 

इसके बाद लाइन 21 पर एक बार फिर से vector v1 की starting position का iterator get किया और फिर लाइन 22 पर advance() function की help से iterator position को 3 steps आगे move कर दिया है यानी अब हमारे iterator के पास element 45 का address होगा.

फिर इसी iterator की help हमने लाइन 23 पर element 85 को add किया है यानी element 45 से पहले. इसके बाद इसी iterator की help से हमने लाइन 31 पर element 90 को 3 बार insert (copy) किया है.

इसके बाद एक बार फिर से लाइन 39 पर advance() function की help से iterator position को 3 steps आगे move कर दिया है यानी अब हमारे iterator के पास element 85 का address होगा.

इसके बाद लाइन 41 और 42 पर हमने vector v2 के starting element और last element के बाद के 2 iterators get किये हैं और इन्हीं iterators की help से हमने vector v2 के elements को लाइन 44 पर vector v1 में copy किया है.


erase(iterator) function

आप जिस vector container के object से इस function को call करोगे उसी vector container का iterator आपको इस function में argument के तौर पर pass करना होगा और फिर ये function उस element को remove कर देगा जिसका address pass किये गये iterator पर होगा. 

erase(start_iterator, end_iterator) function

आप जिस vector container के object से इस function को call करोगे उसी vector container की range के 2 iterators आपको इस function में arguments के तौर पर pass करना होगा और फिर ये function उस range के elements को remove कर देगा जिस range के iterator आपने function में pass किये हैं

नोट: Second iterator का element erase नहीं होता क्योंकि वो range में exclusive होता है.  

Return value: ये दोनों functions erase किये गये elements के बाद वाले element का iterator return करते हैं.

clear() function

ये function vector container के सभी elements को remove कर देगा. 

Example Program:

#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main()
{
    vector<int> v = {10,25,30,35,40,45,55,60,65};

    auto it = v.begin();

    //remove first element
    v.erase(it);

    //display vector elements
    for(int ele : v)
        cout<<ele<<" ";

    cout<<endl;

    //iterator position on 35
    auto it1 = v.begin()+2;
    //iterator position on 60
    auto it2 = v.begin()+6;

    //remove elements between range
    v.erase(it1,it2);

    //display vector elements
    for(int ele : v)
        cout<<ele<<" ";

    //remove all elements
    v.clear();
    cout<<"\nVector Size: "<<v.size();

    return 0;
}

Output:

25 30 35 40 45 55 60 65
25 30 60 65
Vector Size: 0

assign(times, value)  function

इस function की help से आप किसी vector को कोई एक element (value) multiple times assign (copy) कर सकते हो और अगर उस vector में कोई elements पहले से हुए तो वो remove हो जायेंगे और vector resize हो जायेगा.

assign(start_iterator, end_iterator) function 

इस function की help से आप किसी एक vector में किसी दुसरे vector के elements को assign (copy) कर सकते हो और जिस vector में element copy किए उसमें अगर पहले कोई elements हुए तो वो remove हो जायेंगे और vector resize हो जायेगा.

swap(vector2) function

इस function की help से आप 2 vectors के elements को आपस में बदल (swap) सकते हो.

Example Program:

#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main()
{
    vector<int> v1 = {25,35,45,55,65};
    vector<int> v2 = {10,20,30};
    vector<int> v3 = {2,4,5,8};

    v1.assign(3,6);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    cout<<endl;

    auto it1 = v2.begin();
    auto it2 = v2.end();

    v1.assign(it1,it2);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    cout<<endl;

    v1.swap(v3);

    //display vector elements
    for(int ele : v1)
        cout<<ele<<" ";

    return 0;
}

Output:

6 6 6
10 20 30
2 4 5 8