PDA

View Full Version : ساختمان داده وكتور ؟



khorzu
دوشنبه 08 تیر 1388, 14:45 عصر
سلام
اگه ممكنه راجع به ساختمان داده وكتور اطلاعات مي خوام ... البته منظورم پياده سازيش نيست ... كاربرد و طرز كارشه ...
اگه ممكنه يه توضيحي هم راجع به اين كد مي خواستم ...

typedef std::vector<Sample*> Samples;
typedef std::vector<Sample*>::iterator Iterator;

tdkhakpur
دوشنبه 08 تیر 1388, 15:51 عصر
سلام
در مورد این که کد بالا چی هست فقط یک نوع تعریف برای نام گذاشتن و ایجاد اسامی برای متغیر کلاسهاست.
ولی توضیحات کلی شما در مورد الگوریتم کم هست.

khorzu
دوشنبه 08 تیر 1388, 16:20 عصر
ممنون بله ... اما در مورد كد بالا سوالم بيشتر راجع به iterator هست ... در مورد توضيح هم : تا اون جايي كه من مي دونم وكتور يك ساختمان داده شبيه آرايه ها هست با اندازه پويا ... اما در مورد نحوه كاربردش و همچنين اينكه iterator اين وسط چيكارست به كمك شما نياز دارم .

tdkhakpur
دوشنبه 08 تیر 1388, 23:37 عصر
سلام


typedef std::vector<Sample*>::iterator Iterator;

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

khorzu
سه شنبه 09 تیر 1388, 10:43 صبح
دوست عزيز من دقيقا همين "کار کلاس را" مي خواهم و گرنه كشف اينكه " Iterator یک کلاس هست مانند سایر کلاسها که عملیات خاص خودش را انجام میدهد" را شخصا در بدو برخورد با اين كد تشخيص داده بودم .

MMMYousefMMM
سه شنبه 09 تیر 1388, 11:49 صبح
Iterator ها تعمیم یافته از اشاره گرها هستند. انتزاعی از نیازمندی های آنها در روشی که به یک برنامه اجازه کار با ساختمان داده های مختلف در یک شکل یکسان را میدهد.
Iterator ها بعنوان یک واسط یا میانجی بین الگوریتمهای containers و generic ها عمل میکنند. بجای عملیات روی انواع داده های مشخص، الگوریتمهای شناسایی شده روی یک دامنه مشخص شده بوسیله یک نوع iterator عملیات انجام میدهد.

khorzu
چهارشنبه 10 تیر 1388, 10:33 صبح
ممنون
اما من چیزی نفهمیدم!
می شه به صورت موردی بگید مثلا در کنار ساختمان داده وکتور می تونه چه کاربردی داشته باشه ؟

MMMYousefMMM
چهارشنبه 10 تیر 1388, 23:09 عصر
کتابخانه STL شامل الگوی کلاسهایی است که داده های پر استفاده را پیاده سازی میکند شامل: vector, link list, set و غیره. STL سه کامپوننت اساسی دارد:
1: Containers : کلاسهایی که قادر به نگهداری عناصر مختلف از داده های یکسان هستند.
2: Iterators : متدهای اصلی برای دسترسی به عناصر Container را عمومیت میبخشد.
3: Algorithms : پیاده سازی عملیات مختلف، جدا از Container های استفاده شده.
بحث در مورد Container را برعهده خود شما برای خلاصه گویی میگذارم و تنها به این اکتفا میکنم که vector یک ساختمان داده خطی است که از نوع Sequence container میباشد. که سه نوع Container وجود دارد که یکی از آنها همین Sequence container میباشد.
بحث اصلی: یک iterator، اشاره گری به یک container میباشد که وضعیت اطلاعات برای آن Container را نگه میدارد؛ شامل موقعیت جاری. بنابراین iterator ها با مراجعه به نوع container ها پیاده سازی میشود.
اما آنها یک رفتار عمومی دارند. آنها اجازه عملیات مقایسه، کاهش پیش افزایش و پس افزایش را میدهند.

حال برای خاتمه مثال زیر را می آورم تا کاملا قضیه روشن شود:

vector<int> vec;
vec.assign(5, 1);

cout << "vec: ";
vector<int>::iterator it;
for(it = vec.begin(); it != vec.end(); it++)
;cout << *it
خروجی:


1 1 1 1 1

khorzu
پنج شنبه 11 تیر 1388, 15:14 عصر
.................................................. .............................
:بوس: