PDA

View Full Version : مبتدی: علت استفاده از اشاره گر در برنامه زیر چیشت؟



simani
سه شنبه 22 تیر 1395, 18:13 عصر
من این برنامه رو از تتوریال سی پلاس پلاس گرفتم.

#include "StdAfx.h"
#include <iostream>
#include <vector>
using namespace std;

int main()
{
// create a vector to store int
vector<int> vec;
int i;




// access 5 values from the vector
for(i = 0; i < 5; i++){
cout << "value of vec [" << i << "] = " << vec[i] << endl;
}


// use iterator to access the values
vector<int>::iterator v = vec.begin();
while( v != vec.end()) {
cout << "value of v = " << *v << endl;
v++;
}
cin.get();
cin.get();
return 0;
}


برای چی باید از V* به جای V استفاده کنیم؟

rahnema1
سه شنبه 22 تیر 1395, 22:04 عصر
سلام
همان معنا و مفهومی که پشت اشاره گر هست در پشت iterator هم وجود داره یعنی iterator در واقع یک اشاره گر هست که آدرس را نشون می ده نه مقدار را. بنابراین برای دسترسی به مقدار لازمه که از عملگر * استفاده کنیم که محتوای آدرس را نشان بدهد.
البته با استفاده از دستور for به سبک زیر ( که از استاندارد c++11 معرفی شده) دیگه لازم نیست به فکر اشاره گر باشید

for(auto v : vec)
{
cout << "value of v = " << v << endl;
}

ciavosh
جمعه 25 تیر 1395, 13:48 عصر
اضافه کنم که در این برنامه از اشاره‌گر استفاده نشده.

simani
جمعه 25 تیر 1395, 16:58 عصر
اضافه کنم که در این برنامه از اشاره‌گر استفاده نشده.
خوب پس از چی استفاده شده؟*v مگه اشاره گر نیست.
ممنون

ciavosh
سه شنبه 29 تیر 1395, 23:50 عصر
v یک ایتریتور (Iterator) هست ولی میتونید همونطور که از یک اشاره گر استفاده میکنید ازش استفاده کنید. هدف سازنده زبان هم اینه که چیزهای که مفهوم یکسان دارند ظاهر یکسان داشته باشند گرچه ممکنه ما رو گیج کنه. ایتریتور یک موجوده (شیئ، آبجکت،...) که کمک میکنه دونه دونه به اعضای یک کانتینر مثل vector دسترسی داشته باشیم و مثلاً بتونیم در یک حلقه همه را چاپ کنیم. چون در سی پلاس پلاس میشه عملگرها رو برای موجود هایی که میسازیم دوباره تعریف کنیم عملگر * و ++ برای ایتریتور طوری تعریف شده که بشه از ایتریتور مثل یک اشاره گر استفاده کرد.