PDA

View Full Version : سوال: Vector



Girl71
چهارشنبه 10 تیر 1394, 08:13 صبح
سلام دوستان من تازه با c++ دارم کار می کنم میدونم که vector یک نوع آرایه هست.اگه ما وکتوری تعریف کنیم چجوری باید بهش تعداد خانه بدون مقدار اولیه بدیم؟؟
یا اینکه اگه براش تعداد خانه رو مشخص نکنیم بعدا توی برنامه مثلا بگیم [vector<Sensor>sensors]
[(sensors.at(i] خونه i رو میفهمه که بشه عملیاتی روش انجام داد؟؟
با تشکر...

Girl71
چهارشنبه 10 تیر 1394, 09:33 صبح
چقدرررررررررررررررر جواب و راهنمایی له شدم اصن:متعجب::متعجب::متعجب::متع ب::افسرده::افسرده::افسرده::ا سرده::افسرده:

stackprogramer
چهارشنبه 10 تیر 1394, 11:16 صبح
درود فرض کنید می خواهیم وکتوری به اسم test شامل ۱۰ خانه از نوع int تعریف کنیم که مقدار اولیه همه خانه ها ۰ است:

vector <int> test(10,0);




الان وکتوری با ۱۰ خانه با مقدار های ۰ داریم البته وکتور هم مانند آرایه شماره گذاریش از صفر شروع می شود برای دسترسی به خانه های وکتور از دو روش استفاده می شود،پس برای تعریفش مقدار پیش فرض صفر می گذارند،وکتور یک ارایه است که درصورت نیاز می تونی طولشو زیاد یا کم کنی!


۱-روش عادی مانند آرایه:
۲-با استفاده از تابع عضو at() :


test[5];
test.at(5);



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




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




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

test.push_back(8);




با این دستور خانه آخر وکتور از بین می رود و از سایز وکتور یکی کم می شود.
test.pop_back();





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

test.size();

Girl71
چهارشنبه 10 تیر 1394, 12:29 عصر
با تشکر از شما ولی سوال من چیزی دیگه ا ی بوداااا:خجالت:

rahnema1
چهارشنبه 10 تیر 1394, 13:22 عصر
سلام
وقتی بخواهید یک وکتور ایجاد کنید و به اندازه مثلا 5 تا عنصر حافظه براش در نظر بگیرید بدون اینکه عنصری بهش اضافه شده باشه از تابع reserve استفاده کنید در این حالت size وکتور برابر با صفر هست
این کار برای اینه که هنگام اضافه کردن عناصر نیازی به رزور حافظه مجدد نباشه
حالا برای اضافه کردن عناصر هم می تونیم از push_back استفاده کنیم( یا insert و ...)
تا قبل از push_back چون عنصری وجود نداره نمیشه با اندیس به اون دسترسی پیدا کرد. صرفا حافظه لازم برای این تعداد در نظر گرفته شده
یه همچین چیزی:

std::vector<Sensor> sensors;
sensors.reserve(5);
sensors.push_back(Sensor());
sensors.push_back(Sensor());

لطفا این دو سایت را مطالعه کنید که در مورد vector و اعضای اون به طور کامل توضیح داده اند
http://www.cplusplus.com/reference/vector/vector
http://en.cppreference.com/w/cpp/container/vector

stackprogramer
چهارشنبه 10 تیر 1394, 13:31 عصر
اگه ما وکتوری تعریف کنیم چجوری باید بهش تعداد خانه بدون مقدار اولیه بدیم؟؟



#include<vector>
#include <iostream>
using namespace std;
int main(){
vector <int> test(10);
cout<<test[1];

return 0;
}


داخل کامپایلر مینگ دبلیو بدون مقدار دهی اجرا شد،وقتی که می خوام محتوا را چاپ کنه،هیچی چاپ نکرد،پس مقدار ندادم و ایرادی نگرفت.




یا اینکه اگه براش تعداد خانه رو مشخص نکنیم بعدا توی برنامه مثلا بگیم [vector<Sensor>sensors]
[(sensors.at(i] خونه i رو میفهمه که بشه عملیاتی روش انجام داد؟؟



من الان یک وکتور تعریف کردم،طولش مشخص نکردم داخل کامپایل و بیلد کردن مشکلی براش پیش نیامد موقع اجرای فایل اجرایی،ویندوز ارور stop working زد،یعنی دسترسی نداریم بهش،


#include<vector>
#include <iostream>
using namespace std;
int main(){
vector <int> test;
cout<<test[1];

return 0;
}



دقیقا اتقاقی که براش می افته شبیه حالتی است که بخوای محتوای خانه حاظه صفر راچاپ کنی،ویندوز اجزای اجرا نداد

UfnCod3r
جمعه 12 تیر 1394, 20:00 عصر
تعداد خونه ها با اضافه کردن ایتم با push_back زیاد میشه.
.
میگم دقت کردین دختر سوال می کنه همه میریزن جواب میدن :متفکر: جدی :متفکر:

amirtork
یک شنبه 14 تیر 1394, 00:03 صبح
تعداد خونه ها با اضافه کردن ایتم با push_back زیاد میشه.
.
میگم دقت کردین دختر سوال می کنه همه میریزن جواب میدن :متفکر: جدی :متفکر:

چقدر حال داری ها! به چه چیزایی دقت میکنی! من به زور user name طرف رو میخونم! تو جنسیت رو هم فکر میکنی؟؟
فکر نکنم زیاد ربطی داشته باشه. جواب سوال رو اگر تعداد نفرات بیشتری بددونن،‌ تعداد جواب ها هم زیاد میشه، سوال هرچی اختصاصی تر میشه، تعداد جواب ها کمتر میشه.
شاید دلیل اینکه جواب تاپیک های پسر ها کمتره اینه که سوال ها بسیار بسیار تخصصی هست! :-D
(صرفا مزاح کردم. قصد توهین نداشتم.)

مبحث ساختمان داده ی vector جالب هست. اگر خواستید بیشتر باهاش آشنا بشید این لینک میتونه کمک کوچیکی بکنه: http://www.cplusplus.com/reference/vector/vector/?kw=vector
در کنار vector مباحثی مثل queue و stack و map هم جالب هستن، اگر آشنا نیستید. فکر میکنم مطالعه در مورد این ساختمان داده ها براتون خیلی جالب باشه.