مرجع STL
مرجع STL در سیپلاسپلاس مجموعهای از ابزارهای استاندارد است که شامل کانتینرها، الگوریتمها و ایتراتورها میشود و به برنامهنویسان اجازه میدهد تا دادهها را بهصورت کارآمد و ایمن مدیریت کنند. STL امکان نوشتن کدهای قابل استفاده مجدد با کارایی بالا را فراهم میکند و مفاهیم کلیدی سیپلاسپلاس مانند نحو، شیگرایی، مدیریت حافظه پویا و کنترل استثناها را بهکار میگیرد. استفاده صحیح از STL موجب کاهش خطاهای رایج مانند نشت حافظه و الگوریتمهای ناکارآمد شده و خوانایی و نگهداری کد را بهبود میبخشد. در این مرجع، خواننده با کانتینرهایی مانند vector، list، map و set آشنا میشود و الگوریتمهایی برای جستجو، مرتبسازی و دستکاری دادهها را میآموزد و میتواند آنها را در پروژههای واقعی پیادهسازی کند. در زمینه توسعه نرمافزار و معماری سیستم، تسلط بر STL امکان طراحی راهکارهای مقیاسپذیر، امن و سازگار با استانداردهای مدرن سیپلاسپلاس را فراهم میکند. پس از مطالعه این مرجع، برنامهنویس قادر خواهد بود تا کانتینرها، ایتراتورها و الگوریتمهای STL را در پروژههای حرفهای پیادهسازی کرده و به بهترین شیوههای توسعه، بهینهسازی عملکرد و امنیت توجه نماید.
مثال پایه
text\#include <iostream>
\#include <vector>
\#include <algorithm>
int main() {
std::vector<int> اعداد = {1, 2, 3, 4, 5};
std::cout << "اعداد اصلی: ";
for (int n : اعداد) {
std::cout << n << " ";
}
std::cout << std::endl;
std::reverse(اعداد.begin(), اعداد.end());
std::cout << "اعداد معکوس شده: ";
for (auto it = اعداد.begin(); it != اعداد.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
در این مثال از کانتینر vector و الگوریتم std::reverse استفاده شده است. vector یک آرایه پویا است که امکان افزودن و حذف عناصر را فراهم میکند. الگوریتم std::reverse ترتیب عناصر را تغییر میدهد. حلقه اول از syntax مبتنی بر range استفاده کرده و کد را خواناتر میکند، در حالی که حلقه دوم از ایتراتورها بهره میبرد تا دسترسی سنتی به عناصر نشان داده شود. استفاده از auto باعث حدس خودکار نوع ایتراتور میشود و خطاهای مربوط به نوع داده کاهش مییابد. این مثال نشان میدهد چگونه STL با ترکیب کانتینرها و الگوریتمها، کدی ایمن، بهینه و قابل نگهداری تولید میکند و از خطاهای مدیریت حافظه جلوگیری میکند.
مثال کاربردی
text\#include <iostream>
\#include <map>
\#include <string>
\#include <algorithm>
class دانشجو {
public:
std::string نام;
int نمره;
دانشجو(std::string n, int nt) : نام(n), نمره(nt) {}
};
int main() {
std::map\<std::string, دانشجو> دانشجویان;
دانشجویان\["A101"] = دانشجو("علی", 85);
دانشجویان\["B202"] = دانشجو("زهرا", 92);
دانشجویان\["C303"] = دانشجو("محمد", 78);
auto maxIt = std::max_element(دانشجویان.begin(), دانشجویان.end(),
[](const auto& a, const auto& b) { return a.second.نمره < b.second.نمره; });
if (maxIt != دانشجویان.end()) {
std::cout << "بالاترین نمره: " << maxIt->second.نام
<< " - " << maxIt->second.نمره << std::endl;
}
return 0;
}
Advanced سیپلاسپلاس Implementation
text\#include <iostream>
\#include <vector>
\#include <set>
\#include <algorithm>
\#include <memory>
class وظیفه {
public:
std::string توضیح;
int اولویت;
وظیفه(std::string d, int p) : توضیح(d), اولویت(p) {}
};
int main() {
std::vector\<std::shared_ptr<وظیفه>> وظایف;
وظایف.push_back(std::make_shared<وظیفه>("طراحی ماژول", 2));
وظایف.push_back(std::make_shared<وظیفه>("پیادهسازی", 1));
وظایف.push_back(std::make_shared<وظیفه>("بازبینی کد", 3));
std::sort(وظایف.begin(), وظایف.end(), [](const auto& a, const auto& b) {
return a->اولویت < b->اولویت;
});
std::cout << "وظایف بر اساس اولویت: " << std::endl;
for (const auto& t : وظایف) {
std::cout << t->توضیح << " - اولویت: " << t->اولویت << std::endl;
}
std::set<int> اولویتها;
for (const auto& t : وظایف) {
اولویتها.insert(t->اولویت);
}
std::cout << "اولویتهای منحصر به فرد: ";
for (int p : اولویتها) {
std::cout << p << " ";
}
std::cout << std::endl;
return 0;
}
برای استفاده مؤثر از STL، انتخاب کانتینر مناسب، بهکارگیری الگوریتمها و استفاده از smart pointerها بسیار مهم است. اشتباهات رایج شامل از دست دادن ایتراتورها، پیمایش ناکارآمد کانتینرهای بزرگ و مدیریت ناقص استثناهاست. برای بهینهسازی عملکرد، از containers مناسب مانند set برای عناصر یکتا و vector برای دسترسی سریع استفاده کنید، از کپیهای غیرضروری پرهیز کنید و از const استفاده کنید. امنیت با استفاده از ایتراتورهای معتبر و smart pointerها تضمین میشود. STL به شما امکان نوشتن کد مقیاسپذیر، امن و قابل نگهداری را فراهم میکند، که برای پروژههای مدرن و با کارایی بالا ضروری است.
📊 مرجع کامل
سیپلاسپلاس Element/Method | Description | Syntax | Example | Notes |
---|---|---|---|---|
vector | آرایه پویا | std::vector<Type> v; | std::vector<int> v={1,2,3}; | دسترسی با اندیس |
vector::push_back | افزودن عنصر | v.push_back(val); | v.push_back(4); | O(1) متوسط |
vector::size | تعداد عناصر | v.size(); | size_t n=v.size(); | O(1) |
vector::begin | ایتراتور ابتدا | v.begin(); | auto it=v.begin(); | برای الگوریتمها |
vector::end | ایتراتور پایان | v.end(); | auto it=v.end(); | برای الگوریتمها |
vector::erase | حذف عنصر | v.erase(it); | v.erase(v.begin()); | O(n) در وسط |
vector::insert | درج عنصر | v.insert(it,val); | v.insert(v.begin()+1,10); | O(n) در وسط |
vector::clear | پاک کردن کانتینر | v.clear(); | v.clear(); | آزادسازی حافظه |
vector::empty | بررسی خالی بودن | v.empty(); | if(v.empty()) ... | O(1) |
vector::front | اولین عنصر | v.front(); | int x=v.front(); | ارجاع |
vector::back | آخرین عنصر | v.back(); | int y=v.back(); | ارجاع |
list | لیست دوطرفه | std::list<Type> l; | std::list<int> l={1,2,3}; | افزودن/حذف سریع |
📊 Complete سیپلاسپلاس Properties Reference
Property | Values | Default | Description | سیپلاسپلاس Support |
---|---|---|---|---|
allocator | std::allocator<T> | پیشفرض | مدیریت حافظه | C++98+ |
iterator | random, bidirectional, forward | متناسب با کانتینر | نوع ایتراتور | C++98+ |
reverse_iterator | reverse compatible | n/a | ایتراتور معکوس | C++98+ |
emplace | emplace_back, emplace_front | n/a | درج بهینه | C++11+ |
capacity | size, capacity | 0 | ظرفیت فعلی | C++98+ |
max_size | size_t | حداکثر | حداکثر عناصر | C++98+ |
hash | std::hash | n/a | برای کانتینرهای unordered | C++11+ |
compare | operator< | n/a | تابع مقایسه | C++98+ |
swap | std::swap | n/a | تعویض محتوا | C++98+ |
thread_safe | yes/no | no | ایمنی در threads | C++11+ |
مرجع STL برای نوشتن کد مؤثر و ایمن در سیپلاسپلاس حیاتی است. تسلط بر کانتینرها، ایتراتورها و الگوریتمها امکان توسعه برنامههای مقیاسپذیر و با کارایی بالا را فراهم میکند. توصیه میشود مطالعه قابلیتهای C++17/20، برنامهنویسی چندنخی و تکنیکهای بهینهسازی برای پیشرفت در عمل حرفهای و توسعه راهکارهای مدرن ادامه یابد.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود