کتابخانه استاندارد قالب

**کتابخانه استاندارد قالب** (به انگلیسی: Standard Template Library) (مخفف: STL) یک کتابخانه نرم‌افزاری برای زبان برنامه‌نویسی ++C است که بسیاری از قسمت‌های کتابخانه استاندارد ++C را تحت تأثیر قرار داده است.

## ساختار
کتابخانه استاندارد چهار جزء دارد:
* الگوریتم
* containers
* functions
* iterators
STL مجموعه‌ای از کلاس‌های متداول را برای ++C مانند کانتینرها و آرایه‌های انجمنی ارائه می‌دهد که می‌تواند با هر نوع داخلی و با هر نوع تعریف شده توسط کاربر که از برخی عملیات‌های ابتدایی پشتیبانی می‌کند (مانند کپی و انتساب) استفاده شود. الگوریتم‌های STL مستقل از کانتینرها نیستند، که به‌طور قابل توجهی از پیچیدگی کتابخانه می‌کاهد.

STL با استفاده از الگوها به نتایج خود می‌رسد. این رویکرد چندشکلی compile-time را ارائه می‌دهد که اغلب کارآمدتر از چند شکلی سنتی run-time است. کامپایلرهای مدرن ++C تنظیم شده‌اند تا خطاها را با استفاده از STL را به حداقل برسانند.

STL به عنوان اولین کتابخانه الگوریتم‌های عمومی و ساختارهای داده برای ++C با چهار ایده در ذهن ایجاد شده است: برنامه‌نویسی همگانی ، انتزاع بدون از دست دادن کارایی، معماری فون نویمان و Value semantics.

## تاریخچه
*تاریخچه کامل: [[:en:History_of_the_Standard_Template_Library|History of the Standard Template Library]]*

در نوامبر ۱۹۹۳ الکساندر استپانوف کتابخانه ای را براساس برنامه‌نویسی همگانی به کمیته ANSI / ISO برای استانداردسازی ++C ارائه داد. و با پاسخ مثبت کمیته رو به رو شد و منجر به درخواست آندرو کونیگ برای پیشنهاد رسمی در جلسه مارس ۱۹۹۴ شد. کمیته چندین درخواست تغییر و الحاق داشت و اعضای کمیته با استپانوف و منگ لی ملاقات کردند تا به جزئیات کمک کنند. الزامات مهم‌ترین الحاقات (کانتینرهای انجمنی) باید با اجرای کامل آنها سازگار باشد، وظیفه ای که استپانوف به دیوید موسر محول کرد. پیشنهادی در جلسه کمیته ANSI / ISO در ژوئیه ۱۹۹۴ تصویب نهایی شد. متعاقباً، سند ۱۷ استپانوف و لی در پیش نویس استاندارد ANSI / ISO C ++ گنجانیده شد (۱، بخشهایی از بندهای ۱۷ تا ۲۷).

چشم‌انداز انتشار گسترده STL با تصمیم Hewlett-Packard برای در دسترس قرار دادن اجرای آن در اینترنت در ماه اوت ۱۹۹۴ به‌طور قابل توجهی بهبود یافت.

## اجزاء
### کانتینرها
STL شامل کانتینرهای ترتیبی (sequence containers) و وابسته (associative containers) می‌شود. کانتینرها اشیایی هستند که داده‌ها را ذخیره می‌کنند.

کانتینرهای ترتیبی (sequence containers) شامل موارد زیر می‌شوند:
# vector
# deque
# list

و کانتینرهای وابسته (associative containers) شامل موارد زیر می‌شوند:
# set
# multiset
# map
# multimap
# hash_set
# hash_map
# hash_multiset
# hash_multimap

همچنین کانتینرهای، prior_queue و stack وجود دارند که کانتینرهایی با interfaceهای خاص هستند و از کانتینرهای دیگر به عنوان پیاده‌سازی استفاده می‌کنند.

### Iterators
این کتابخانه شامل پنج نوع تکرارشونده است که عبارت اند از:

*input iterators* (که فقط برای خواندن مقادیر به صورت ترتیبی قابل استفاده هستند)،

*output iterators* (که فقط برای نوشتن مقادیر به صورت ترتیبی قابل استفاده هستند)،

*forward iterators* (که قابل خواندن، نوشتن و حرکت به جلو است)،

*bidirectional iterators* (مانند forward iterators هستند، اما همچنین می‌توانند به عقب حرکت کنند) و

*random access iterators* (که می‌توانند با تعداد آزادانه هر مرحله را در یک عملیات حرکت دهند)

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

bidirectional iterators ممکن است مانند random access iterators عمل کنند، بنابراین حرکت به جلو در ده مرحله می‌تواند با حرکت به جلو در یک مرحله و در کل ده بار انجام شود. با این وجود، random access iterators مجزا مزایای کارایی را به همراه دارد. به عنوان مثال، یک بردار یک random access iterators دارد، اما یک لیست فقط یک bidirectional iterators دارد.

تکرار کننده‌ها ویژگی اصلی هستند که به کلیات STL اجازه می‌دهند. به عنوان مثال، یک الگوریتم برای معکوس سازی یک توالی می‌تواند با استفاده از bidirectional iterators پیاده‌سازی شود، و سپس همان پیاده‌سازی را می‌توان در لیست‌ها، vectors و deques استفاده کرد. کانتینرهای ایجاد شده توسط کاربر فقط باید یک تکرار کننده ارائه دهند که یکی از پنج رابط استاندارد تکرار کننده را پیاده‌سازی کند و تمام الگوریتم‌های ارائه شده در STL را می‌توان روی کانتینرها استفاده کرد.

### [[الگوریتم|Algorithms]]
تعداد زیادی الگوریتم برای انجام فعالیتهایی از قبیل جستجو و مرتب‌سازی در STL ارائه شده است که هرکدام برای نیاز به سطح مشخصی از تکرار کننده پیاده‌سازی شده‌اند (و بنابراین بر روی هر کانتینر که از طریق تکرار کننده‌ها رابطی را فراهم می‌کند کار خواهند کرد).

### Functions
شمول شدن کتابخانه الگوریتم توابعی را به همراه دارد که در ترتیب دهی و جستجو در آرایه‌ها بسیار مفید است.الگوریتم‌ها در ظروف نقش بسیار مفیدی دارند.

## منابع

رده:برنامه‌نویسی جنریک
رده:کتابخانه استاندارد سی++