سلام؛ استفاده از کتابخانههای STL بسیار سر راست و آسان هست.
STL Container: std::vector
مثلاً برای استفاده از std::vector میتونید به اینصورت عمل کنید:
std::vector<int> vec;
vec.push_back(10);
vec.push_back(11);
vec.push_back(12);
vec.push_back(13);
با استفاده از تابع std::vector::push_back به انتهای آرایهاتون یک مقدار اضافه میکنید، با استفاده از تابع std::vector::size هم میتونید تعداد دادهای که توی std::vectorتون ذخیره شده رو به دست بیارید :
for(size_t i = 0; i < vec.size(); ++i)
{
std::clog << vec.at(i) << std::endl;
std::clog << vec[i] << std::endl;
}
که خروجی میشه :
10
10
11
11
12
12
13
13
تنها تفاوتی که تابع std::vector::at با عملگر [ ] داره، اینکه تابع std::vector::at یک عملیات Range checking هم انجام میده، به این معنیکه اگه روی شئ std::vector بالا این تابع را با ورودی ۱۰ استفاده کنیم یک Exception دریافت میکنیم :
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 10) >= this->size() (which is 4)
که به وضوح مشخص میکنه ورودی شما ۱۰ هست، درحالی که کل اندازه ۴ هست.
کتابخانههای STL از Iteratorها هم استفاده میکنند، که شما میتونید به اینصورت روی عناصرشون Iterate کنید :
for(auto i : vec)
{
std::clog << i << std::endl;
}
به این نوع حلقه Range for میگند که نیازمند پیادهسازی توابع begin, end برای اون کلاستون هست.
STL Algorithms : std::generate, std::minmax_element
همچنین، ما در STL کلاسهایی تحت عنوان Algortithms در هدرفایلی به همین اسم داریم. که توی نوشتن کد سریع و بدون مشکل خیلی به ما کمک میکنه. مثلاً برای اینکه بخوایم یک Containerی مثل std::vector رو مقداردهی کنیم. میتونیم به راحتی از std::generate استفاده کنیم که یک begin iterator و end به یک شئ و یک Callable object دریافت میکنه و به ازاء هر عنصر از کلاس ما مقدار بازگشتی از Callable objectتمون رو بهش ارسال میکنه :
std::vector<int> vec(10);
std::srand(std::time(nullptr));
std::generate(vec.begin(), vec.end(), []() { return std::rand() % 1000; });
و مثلاً برای پیدا کردن بزرگترین و کوچکترین عضو، میتونیم از std::minmax_element استفاده کنیم، که نیازمند یک کامپایلر با پشتیبانی از استاندارد ۱۷ هست. این تابع یک begin iterator و end به کلاس Container شما دریافت میکنه و یک std::pair بر میگردونه :
auto [min, max]{std::minmax_element(vec.begin(), vec.end())};
std::clog << *min << ":" << *max << std::endl;