PDA

View Full Version : آموزش STL



fa.mk244
جمعه 28 بهمن 1390, 03:00 صبح
چون تو سایت مطلب جامع و کاملی برای این بحث نبود،این تاپیک باز کردم

تا اونجایی که میشد از همه منابع در دسترس کمک گرفتم،ولی بازم برای اطلاعات بیشتر میتونین از سایت سازنده sgi (http://www.sgi.com/tech/stl/stl_index_cat.html) و msdn (http://msdn.microsoft.com/en-us/library/c191tb28.aspx) و cplusplus.com (http://www.cplusplus.com/reference/stl/) استفاده کنین

هر کدی که میزارم با Borland C++‎‎ 5.02 و یا Visual Studio 2010 کامپایل شده(یه سری رو Borland جواب نمیده بخاطر زیرخاکی بودنش و یه سری هم روی Visual Studio چون نیاز بوده ببینین که استفاده اشتباه از یه دستور چی میده به خروجی!!!)
این مطلب در این سایت آپدیت میشه (http://forum.infoboy.ir/showthread.php?tid=392)
__________________________________________________ ______________________________
اول یه مقدمه ای درباره STL میگم
Standard Template Library (STL)، کلاس ها و توابع همه منظوره و قالب را ارائه میکنه که اکثر الگوریتم ها و ساختمان داده های معروف و متداول را پیاده سازی می کنن. همینطور روشهایی را برای دستیابی به آنها ارئه میده. چون STL از کلاسهای قالب درست شده، الگوریتم ها و ساختمان داده های آنها تقریبا برای تمام انواع داده ای قابل استفادن.
هسته اصلی STL،سه مولفه است: کانتینرها(containers)،الگوریتمه ا(algorithms) و تکرار گرها(iterators).

Containers و iterators از دسته کلاسهای الگو هستن. iterators برای پیمایش همه عناصر یک ظرف استفاده میشن. algorithms برای دستکاری داده ها استفاده میشن.
دلایل استفاده از STL:
- کاهش زمان کدنویسی بخاطر وجود ساختمان داده های نوشته شده و کامپایل شده از قبل
- خواناتر شدن برنامه
- قدرتمندتر شدن برنامه
- قابل حمل بودن برنامه
- آسانی استفاده از آن

container: اشیایی که مانند ظرف عمل کرده و اشیای دیگر را نگهداری می کنن و انواع مختلفی دارن.
- deque , list , vector : Sequential Container
- map , multimap , multiset , set : Associative Container
- priority_queue , queue , stack : Adapters Container

algorithm: الگوریتم ها بر روی کانتینر ها عمل می کنن. با اگوریتمها میشه محتویات کانتینر ها را دستکاری کرد. قابلیتهای آنها شامل: ارزش دهی،مرتب سازی،جستجو و جابجایی محتویات کانتینر هاست.
iterator: به iterator طی کننده یا تکرار کننده هم گفته میشه.iterator ها اشیایی هستن که اغلب آنها اشاره گرن و با استفاده از آنها میشه محتویات کانتینرها را مانند آرایه ها پیمایش کرد.

fa.mk244
جمعه 28 بهمن 1390, 03:20 صبح
کلا برای هر بحث یه عکس درست کردم که همه چی رو میگه و برای تمرین و یادگیری میتونین مثال هارو دانلود کنین.
پشته، ساختمان داده ای با ویژگی First Input Last Output.
برای تعریف وکتور باید اول کتابخونه اون رو اضافه کنید:
#include <stack>

متدهای مهم این ساختمان داده عبارتند از:

(http://forum.infoboy.ir/showthread.php?tid=392)
http://mk244.persiangig.com/image/STL/stack-1.png (http://forum.infoboy.ir/showthread.php?tid=392)

fa.mk244
جمعه 28 بهمن 1390, 03:28 صبح
وکتور رو یک جور آرایه پویا فرض کنین.یه جور لیست، که مثل لیست پیوندی میشه اندازش رو نامشخص تعیین کرد و در حین کار بهش عضوی اضافه کرد و یا ازش عضو رو حذف کرد و یه خاصیت آرایه ای هم داره به اینصورت که می شه به یک عضوش بصورت مستقیم دسترسی پیدا کرد.
برای مثال اگر که بخوایم توی یه برنامه از آرایه استفاده کنیم اما اندازه آرایه از ابتدا مشخص نباشه و یا در طول برنامه اندازش تغییر کنه(یه عضو حذف بشه یا اضافه بشه)، می تونیم از vector استفاده کنیم. وکتور از random access هم پشتیبانی میکنه، یعنی میشه با اندیس عنصر بهش دسترسی داشت.

برای تعریف وکتور باید اول کتابخونه اون رو اضافه کنید:
#include <vector>
متدهای مهم این ساختمان داده عبارتند از:
(http://forum.infoboy.ir/showthread.php?tid=392)
http://mk244.persiangig.com/image/STL/vector-1.png (http://forum.infoboy.ir/showthread.php?tid=392)

*iteratorها ابزاری برای پیمایش هستن و عملگرهای ++ و – و + و – و... برای آنها overload شدن. مثلا وقتی که یه iterator را یک واحد افزایش میدیم، به عنصر بعدی در مجموعه(مجموعه هرچیزی میتونه باشه) اشاره میکنیم(محاسبه عنصر بعدی براساس الگوریتم خاصی صورت میگیره) و این افزایش را نباید با افزایش صرفا مقدار آدرس یک شی اشتباه گرفت.

برای استفاده از اشاره گر از دستور زیر استفاده می کنیم:
vector <int*> x;

fa.mk244
جمعه 28 بهمن 1390, 03:39 صبح
لیست مثل وکتوره و طول آن بصورت پویا تغییر میکنه با این تفاوت که لیست ساختاری پیوندی داره و باعث میشه که درج یک عنصر جدید در زمانی ثابت انجام بشه.(درج عنصر به انتهای وکتور نیز در زمان ثابت انجام میشه) این ویژگی لیست زمانی که درج عنصر در ابتدای مجموعه صورت میگیره، مهمه.لیست فقط بصورت ترتیبی پیمایش میشه و از random access پشتیبانی نمیکنه.خونه های لیست از یک شروع میشن.

برای تعریف وکتور باید اول کتابخونه اون رو اضافه کنید:
#include <list>
متدهای مهم این ساختمان داده عبارتند از:

(http://forum.infoboy.ir/showthread.php?tid=392)
http://mk244.persiangig.com/image/STL/list-1.png (http://forum.infoboy.ir/showthread.php?tid=392)