منبع اصلی نوشتار زیر در این لینک قرار دارد

آموزش وکتور vector در ++C

stable vector آموزش وکتور vector در ++C

وکتور  vector یکی از کلاس های خیلی خوبه سی پلاس پلاس است که استفاده از آن نوشتن خیلی از برنامه ها رو آسان می کند . وکتور تا حدودی مانند آرایه است با این تفاوت که می شود حین برنامه به آن اضافه کرد و یا کم کرد هم چنین متد های زیادی دارد که باعث می شود وقتمان را برای نوشتن متد برای کار با آریه هدر ندهیم .

البته بجای لینک لیست در خیلی از جاها می شود وکتور هم استفاده کرد و از درد سرهای لینک لیست کاست برای دیدن آموزش لینک لیست اینجا کلیک کنید.

برای استفاده از وکتور باید هدر آن  را پیوست برنامه کرد :

#include <vector>

فرض کنید می خواهیم وکتوری به اسم test شامل ۱۰ خانه از نوع int تعریف کنیم که مقدار اولیه همه خانه ها ۰ است:

vector <int> test(10,0);

الان وکتوری با ۱۰ خانه با مقدار های ۰ داریم البته وکتور هم مانند آرایه شماره گذاریش از صفر شروع می شود برای دسترسی به خانه های وکتور از دو روش  استفاده می شود
۱-روش عادی مانند آرایه:
test[5];

2-با استفاده از تابع عضو at() :

test.at(5);

استفاده از at بهتر است چون اگر از  وکتور بیرون بزنیم برنامه خطا می دهد ولی در حالت یک چنین اتفاقی نمی افتد.

در بالا از سایز اسم بردم پس بگذارید شما را با دو اصطلاح آشنا کنم :
سایز  (size) : سایز همان تعداد خانه هایی است  که ما  در وکتور داریم در وکتوری که ما ایجاد کردیم سایز ۱۰ است و برای پیدا کردن سایز وکتور تابع عضو   size را داریم که به این شکل است :

test.size();

حالا اگه آن را در دستور خروجی قرار بدهیم مقدار ۱۰ را نشان می دهد:

cout<<test.size();

ظرفیت  (capacity):فرض کنید که ما بخواهیم یک خانه به وکتور اضافه کنیم و این کار را چند بار انجام دهیم کمی وقت می گیرد تا از حافظه بخشی را برای آن جدا  کند به همین خاطر این در وکتور تعدادی خانه را آماده نگه می دارد برای وقتی که خواستیم به طول آن اضافه کنیم برای پی بردن به ظرفیت از تابع عضو  capacity() استفاده می کنیم:

test.capacity();

اگر آن را در خروجی چاپ کنیم مقدار ۱۲ را بر می گرداند که دوتا از سایز  بزرگ تر است یک سوال پیش می آید با خود می گوییم اگر ۲ خانه به وکتور اضافه کردیم و ظرفیت پر شد چه می شود؟ جواب ساده است آنگاه برنامه دوباره ظرفیت  را زیاد می کند.

حالا نوبتی هم باشه نوبت max_size() این تابع عضو  بیشرین طول ممکن برای ایجاد  یک وکتور را می گوید که اندازه آن به مشخصات سیستم مربوط می شود:

test.max_size();

حالا می ریم سراغ تابع عضو resize() که یکی از تابع های کاربردی در وکتور است  فرض کنید در وکتور test با سایز ۱۰ ما ۴ خانه آخر را نخواهیم یا ۴ خانه کم  داشته باشیم و بخواهیم اضافه کنیم :

test.resize(6);
test.resize(14);

در دستور اول سایز را به ۶ کاهش دادیم و در دستور بعدی سایز را ۱۴ تا اضافه کردیم.

دو تابع عضو دیگر هم به اسم .push_back() و pop_back() را هم داریم که کار اضافه کردن و کم کردن به آخر وکتور را  دارند:
۱-تابع عضو push_back:

test.push_back(8);

با دستور بالا یک خانه به آخر وکتور با مقدار ۸ اضافه می شود و به سایز وکتور یکی اضافه می شود.
۲-تابه عضو .pop_back() :

test.pop_back();

با این دستور خانه آخر وکتور از بین می رود و از سایز وکتور یکی کم می شود.

تابع های عضو .back() و .front() هم خانه های آخر و اول وکتور را تعیین می کنند:

test.front();
test.at(0);

دو دستور بالا با هم برابرند.
برای نابود کردن یک وکتور هم  از تابع عضو .clear() استفاده می کنیم:

test.clear();

در زیر هم کدی از چیز هایی که گفته شد آمده – مثالی از وکتور vector در سی پلاس پلاس:

#include <iostream>
#include <vector>
#include <algorithm>
//=============================================
class classtest{
    public:
        classtest(){x=2,y=3;}
        int getx(){return x;}
        int gety(){return y;}
        void setx(int interData){x=interData;}
        void sety(int interData){y=interData;}
    private:
        int x;
        int y;
    }ex;

using namespace std;

int main()
{
    //test .at()  .size()  .capacity()  .max_size()
    cout<<".at()  .size()  .capacity()  .max_size() :"<<endl;
    unsigned int i,j;
    vector<int> test(12,5);
    for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }
    //test resize
    cout<<"resize :"<<endl;
    cout<<endl;
    test.resize(15);
    for(i=0;i<test.size();i++)
    {
        cout<<i<<" "<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }

    //test .reserve()
    //increase .reserve()
    cout<<endl;
    cout<<"increase .reserve() inc"<<endl;
    test.reserve(30);
    for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }

    //decrise .reserve() //no Work
    cout<<".reserve():  no Work dec"<<endl;
    cout<<endl;
    test.reserve(0);
    for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }
    //.push_back(x)
    cout<<".push_back: "<<endl;
    test.push_back(12);
    cout<<endl;
    for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }

    // .pop_back
    cout<<".pop_back: "<<endl;
    test.pop_back();
    cout<<endl;
     for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }

    //.back() and .front()
    cout<<".back() and .front(): "<<endl;
    cout<<"First:"<<test.front()<<"  Last:"<<test.back()<<endl;

    //array sort:  sort(arr,arr+n);
    //vector sort:
     cout<<"sort(): "<<endl;
    test.push_back(3);
    sort(test.begin(),test.end());
    cout<<endl;
    for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }

    //insert
    cout<<".insert(): "<<endl;
    test.insert(test.begin(),30,9);
    cout<<endl;
    for(i=0;i<test.size();i++)
    {
        cout<<test.at(i)<<" "<<test.capacity()<<" "<<endl;
        test.at(i)=i;
    }

    cout<<"\nEnter any key to continue."<<endl;
    cin.get();
    // .clear()
    test.clear();

    //clear screen
    system("CLS");

    //vector in vector
    vector<int> test0(15,5);
    vector< vector<int> > test1(10);
    for(i=0;i<test1.size();i++)
    {
        test0.resize(15-i);
        test1.at(i)=test0;
    }
    //access in internal
    cout<<(test1.at(1)).at(1)<<endl;

    for(i=0;i<test1.size();i++)
    {
        for(j=0;j<(test1.at(i)).size();j++)
        {
            cout<<" "<<(test1.at(i)).at(j);
        }
        cout<<endl;
    }

    cout<<"\nEnter any key to continue."<<endl;
    cin.get();
    //clear screen
    system("CLS");

    // .clear()
    test0.clear();
    test1.clear();

    //vector with  class
    vector <classtest> test2(10,classtest());
    for(i=0;i<test2.size();i++)
    {
        cout<<(test2.at(i)).getx()<<" "<<(test2.at(i)).gety();
    }

    return 0;
}

 

digg آموزش وکتور vector در ++C  reddit آموزش وکتور vector در ++C  stumbleupon آموزش وکتور vector در ++C  yahoo buzz آموزش وکتور vector در ++C  dzone آموزش وکتور vector در ++C  facebook آموزش وکتور vector در ++C  delicious آموزش وکتور vector در ++C  dotnetkicks آموزش وکتور vector در ++C  dotnetshoutout آموزش وکتور vector در ++C  linkedin آموزش وکتور vector در ++C  technorati آموزش وکتور vector در ++C  twitter آموزش وکتور vector در ++C  google buzz آموزش وکتور vector در ++C  



برچسب ها : , , , ,