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

stable_vector

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

۳۴ comments

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

  • کوتاه مختصر مفید
    سپاس گذارم

  • مطالبتون عالی است

  • مطالبتون عالیه

  • مطالب عالی بود خیلی خیلی ممنون

  • خیلی ممنون . بسیار مفید بود

  • سلام
    بابت مطالب مفید سایتتون بسیار متشکرم. هر بار که مطلبی رو متوجه نشم به سایت شما سر میزنم وقتی ببینم اون مطلبو داره مطمین میشم که یادش میگیرم.واقعا که عالیه

  • سلام تو codeblocks

    size و capacity رو هم اندازه میگیره. یعنی اگه سایز رو ده نشون بده دیگه capacity دوازده نشون نمیده.چرا؟

    • فرهاد دلیرانی

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

      برای مطالعه ی بیشتر به آدرس زیر بروید:

      http://stackoverflow.com/questions/6296945/size-vs-capacity-of-a-vector

  • salam khubin?matlabeton kheili mofid bud mishe ye tozih ham dar morede kar ba QT bedin?
    mamnoonam

  • ممنون از مطلب مفیدتان.منم به کسی که با qtکار کرده باشد نیاز دارم.میشه لطفا ایمیل فردی که بلد هست را به منم لطف کنید بدین؟:(

  • برای این که بخواهیم وکتور ما شامل چند تا داده باشه چی ؟
    مثلا یه دونه اینتیجر و یه دونه استرینگ

  • در خط ۱۵ ex چیه؟

  • سلام
    من باید برنامه درخت متوازن رو بنویسم مربوط به درس ذخیرست
    میخوام توی نود هام به جای یک فیلد چند فیلد بذارم میشه بګید باید چیکار کنم؟

    • فرهاد دلیرانی

      منظورتون رو دقیق نفهمیدم، یک کلاس جدید تعریف کن که شامل چند فیلد باشد و آن کلاس را درون وکتور بریزید.

  • مهمترین دستور قسمت insert رو توضیح ندادید!

  • سلام
    آیا تابعی وجود داره که یه وکتور از وکتور هایی بسازه که سایزشون یکی نیست؟

  • یه سوال داشتم.استادمون یه پروژه دادن با این موضوع که کوتاهترین مسیر(منظورم کمترین هزینه س ) بین دو شهر رو پیدا کنید.گفتن برای پیاده سازی گراف ها از لینک لیست استفاده کنید.الان اگر من به جای لینک لیست از وکتور استفاده کنم ایشون میتونن از نمره پروژم کم کنن ؟
    میخواستم بدونم میزان مصرف حافظه برای چنین پروژه ای چقدره؟(با استفاده از الگوریتم دایچسترا نوشته شده) ممنون میشم کمکم کنید.

    • فرهاد دلیرانی

      بعید می دونم مشکللی باشه ولی باز از استاد بپرسید در مورد هزینه الگوریتم چیزی نمی تونم بگم باید ببینم و به پیاده سازی هم مربوط است

  • سلام یه سوال شما میتونید درباره ی این برنامه راهنمایی کنید؟؟؟با (وکتور میخواهم قسمت جستجو رو بروم)
    برنامه ای بنویسید که اطلاعات دانشجویان را دریافت وذخیره وبازیابی وجستجو کند /

    • فرهاد دلیرانی

      خوب اول یک کلاس درست می کنید برای دانشجو ها که اطلاعاتی مثل شماره دانشجویی و اسم و… در آن است، بعد یه ویکتور از جنس اون کلاس درست می کنی و بعد اطلاعاتتو با دستور پوش که در متن آمده در وکتور می ریزی برای جستجو هم از خانه صفر وکاور شروع می کنی به مقایسه تا خونه آخر که همان سایز منهای یک است. موبد باشید. 🙂

  • سلام/خیلی سایت خوبی بود /درباره جستجو در وکتور میخواستم بیشتر بدونم؟؟؟؟؟؟؟؟؟؟

  • با سلام و خسته نباشی
    مطالب بسیار مفیدی بود
    میتونید یک مرجع نمونه سوال در مورد مبحث چند ریختی ، وراثت ، کلاسها ،تابعهای بازگشتی، رشته ها و اشاره گرها با زبان c++ بهم معرفی کنید.
    با تشکر

    • فرهاد دلیرانی

      با سلام ، می تونید از تمرین ها و مثال های آخر فصل کتاب “چگونه با سی پلاس پلاس برنامه بنویسیم؟” اثر دیتل استفاده کنید.

  • سلام.پستتون خیلی به دردم خورد.ممنون.
    یه سوال داشتم شما تا حالا با Qtکار کردید؟چند تا سوال می خواستم بپرسم.اگه خودتون کار نکردید،میتونید کسی رو بهم معرفی کنید که کار کرده باشه و ایمیلش رو بهم بدید تا چند تا سوال بپرسم.اگه میشه از طریق ایمیلم بهم خبر بدید.@};-

  • سلام ; تشکر از مطالب خوبتان کمتر سایتی دیدم که به این تر و تمیزی پست بذاره حیف که تعداد محدودی پست در هفته می گذارید .

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *