در حال بارگذاری...

مرجع STL

مرجع STL در سی‌پلاس‌پلاس مجموعه‌ای از ابزارهای استاندارد است که شامل کانتینرها، الگوریتم‌ها و ایتراتورها می‌شود و به برنامه‌نویسان اجازه می‌دهد تا داده‌ها را به‌صورت کارآمد و ایمن مدیریت کنند. STL امکان نوشتن کدهای قابل استفاده مجدد با کارایی بالا را فراهم می‌کند و مفاهیم کلیدی سی‌پلاس‌پلاس مانند نحو، شی‌گرایی، مدیریت حافظه پویا و کنترل استثناها را به‌کار می‌گیرد. استفاده صحیح از STL موجب کاهش خطاهای رایج مانند نشت حافظه و الگوریتم‌های ناکارآمد شده و خوانایی و نگهداری کد را بهبود می‌بخشد. در این مرجع، خواننده با کانتینرهایی مانند vector، list، map و set آشنا می‌شود و الگوریتم‌هایی برای جستجو، مرتب‌سازی و دستکاری داده‌ها را می‌آموزد و می‌تواند آنها را در پروژه‌های واقعی پیاده‌سازی کند. در زمینه توسعه نرم‌افزار و معماری سیستم، تسلط بر STL امکان طراحی راهکارهای مقیاس‌پذیر، امن و سازگار با استانداردهای مدرن سی‌پلاس‌پلاس را فراهم می‌کند. پس از مطالعه این مرجع، برنامه‌نویس قادر خواهد بود تا کانتینرها، ایتراتورها و الگوریتم‌های STL را در پروژه‌های حرفه‌ای پیاده‌سازی کرده و به بهترین شیوه‌های توسعه، بهینه‌سازی عملکرد و امنیت توجه نماید.

مثال پایه

text
TEXT Code
\#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
TEXT Code
\#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
TEXT Code
\#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، برنامه‌نویسی چندنخی و تکنیک‌های بهینه‌سازی برای پیشرفت در عمل حرفه‌ای و توسعه راهکارهای مدرن ادامه یابد.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

3
سوالات
🎯
70%
برای قبولی
♾️
زمان
🔄
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود