جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'std'.
2 نتیجه پیدا شد
-
اگرچه که زبان برنامهنویسی سیپلاسپلاس به عنوان یک زبان بسیار قدرتمند و قدیمی شناخته شده است، اما کتابخانهٔ استاندارد و پیشفرض آن برخی از موارد واقعاً مهم را به تازگی تعبیه کرده است. ویژگیهایی که در زبانهایی مثل جاوا و یا سیشارپ داتنت سالهاست وجود دارند. به هر حال این ویژگیها در سی++ ۱۷ موجود شدهاند و این یک بهبود و پیشرفت بسیار خوب است. برای مثال ما الآن فایلسیستم استانداردی را در اختیار داریم. این ویژگی به عنوان یک کتابخانه، امکان برای انجام عملیات بر روی سیستمفایلها و اجزای آنها مانند، مسیرها، فایلها و پوشهها را فراهم میکند. کتابخانهٔ فایلسیستم در فایل سرآیند <filesystem> قرار گرفته است که توسط فضای نام مخصوص خود std::filesystem قابل فراخوانی است. به مثال زیر توجه کنید: namespace fs = std::filesystem; استفاده از این کتابخانه بسیار ساده و کاربردی است، بنابراین اگر بخواهیم به سادگی مسیری از یک ریشه را به دست آوریم، کد آن به صورت زیر خواهد بود: #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::path p = fs::current_path(); std::cout << "The current path " << p << " decomposes into:\n" << "root name " << p.root_name() << '\n' << "root directory " << p.root_directory() << '\n' << "relative path " << p.relative_path() << '\n'; } فراخوانی کتابخانه، نمونهسازی از کلاس current_path و سپس چاپ نام، ریشه و مسیر مربوطهٔ آن صورت گرفته است. بنابراین این کتابخانه دارای کلاسهای زیر است که توضیح و کاربرد هر کدام را آوردهایم: کلاس path، این کلاس امکان کار با مسیرها را فراهم میکند، در واقع برای نمایش یا مشاهدهٔ یک مسیر از این کلاس استفاده خواهیم کرد. کلاس filesystem_error یک شیء استثناء در اثر سربارگذاری بیشاز حد کتابخانهٔ فایلسیستم ایجاد میکند، در واقع برای مدیریت خطاها کاربردی خواهد بود. کلاس directory_entry برای کنترل ورودی یک مسیر استفاده میشود، برای مثال بررسی وجود یا عدم وجود در زیر مجموعههای این کلاس امکانپذیر است. کلاس directory_iterator یک تکرار کننده از محتوای یک مسیر (دایرکتوری) را ارائه میکند. کلاس recursive_directory_iterator یک تکرار کننده از محتوایت یک مسیر یا زیر مسیرهای آن را ارائه میکند. کلاس file_status نوع فایل و مجوزهای آن را ارائه میکند. کلاس space_info اطلاعات مربوط به فضای آزاد و موجود در سیستمفایل را ارائه میکند. کلاس file_type اطلاعات مربوط به نوع فایل را ارائه میکند. کلاس perms مجوزهای سیستمفایل را شناسایی میکند. کلاس perm_options معانی هر یک از عملیات مرتبط با مجوزها را ارائه میکند. کلاس copy_options معانی عملیات کپی را مشخص میکند. کلاس directory_options معانی عملیات مربوط به مسیر (دایرکتوری) را مشخص میکند. کلاس file_time_type مقادیر زمانی مربوط به فایل را ارائه میکند. هر یک از کلاسهای فوق دارای متدها و توابعی هستند که در مدیریت فایلسیستم بسیار کاربردی و مفید خواهد بود. در کلاس path شما میتوانید با متدهای مفیدی کار کنید، برای مثال کد زیر پسوند یک فایل موجود که در مسیر به آن اشاره میشود را، در صورت وجود ارائه خواهد کرد. fs::path("/foo/bar.txt").extension(); اگر مسیر فوق دارای فایل ذکر شده باشد، مقدار برگشتی آن .txt خواهد بود. و یا اگر نیاز باشد نام فایل را ارائه کند کافی است از متد file_name آن استفاده کنید! به مثالهای زیر توجه کنید: #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { std::cout << fs::path("/foo/bar.txt").filename() << '\n' << fs::path("/foo/.bar").filename() << '\n' << fs::path("/foo/bar/").filename() << '\n' << fs::path("/foo/.").filename() << '\n' << fs::path("/foo/..").filename() << '\n' << fs::path(".").filename() << '\n' << fs::path("..").filename() << '\n' << fs::path("/").filename() << '\n' << fs::path("//host").filename() << '\n'; } همچنین جهت مدیریت خطا و دریافت یک کد یا پیغام خطا به کد زیر توجه کنید: try { cout << fs::file_size("path&file"); } catch (fs::filesystem_error &e) { cout << "Error Message = " << e.what() << " with Code : " << e.code(); } در صورتی که خطایی رخ دهد، کد خطا ساطع خواهد شد، جهت نمایش پیام خطا از تابع what و دریافت کد خطا از تابع code استفاده میشود. این مقاله ادامه دارد...
-
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #e62f3d; color: #ffffff;" >برنامه نویسی در C و ++C</span>
با توجه به عنوان مقاله، شباهتهای بسیاری بین std::string_view و std::span وجود دارد، در واقع، string_view و span اشیاءای هستند که به یک ترتیبِ به هم پیوسته از عناصری اشاره دارند که نقطهٔ آغازین آنها از موقعیت صفر است؛ و همچنین عملیات استاندارد نگهدارندهها (ظرف) را ارائه میکنند. هر دو نوع شیء از نوع easy-to-copy (کپی آسان) هستند که دارای یک اشارهگر و یک عنصر اندازه هستند. از نظر مفهومی، آنها دیدگاههای غیر صاحب یک آرایه (یا دنبالهٔ پیوسته) هستند که رابط استاندارد غنیای را ارائه میکنند. در مورد تفاوتها (اختلافات) بین این دو، <std::span<T یک الگوی نمایش آرایهای با هدف کلی است، در حالی که std::string_view یک نمایش تخصصیتر در یک دنبالهکاراکتر یا رشته است. در زیر شرح مختصری از این تفاوتها آورده شده است: شیء span یک قالب (Template) است، اما string_view خیر! شیء span، الگویی است که با هر نوعِ تعریف شده توسط کاربر کار میکند، در حالی که string_view به طور خاص نمای یک آرایهٔ مشخص پیوسته است. از نظر سطحی یک string_view معادل <span <char است. char buff[] = "Hello World"; auto sp = std::span<char>(&buff[0], 5); auto sv = std::string_view(&buff[6], 5); for(auto c : sp) std::cout << c; //Hello std::cout << " "; for(auto c : sv) std::cout << c; //World اما، ویژگیهای string_view بیشتر از این مورد میتواند باشد. شیء string_view یک نوع فقط خواندنی برای نمایش است. یکی از ویژگیهای برجستهٔ string_view این است که این شیء فقط یک نمایش فقط خواندنی است. بنابراین، ما نمیتوانیم یک آرایهٔ زیرین را از طریق یک string_view تغییر دهیم، در حالی که این امکان از طریق span ممکن است: char str[] = "hello"; //Change str to uppercase through span auto sp = std::span<char>(str,strlen(str)); std::transform(sp.begin(), sp.end(), sp.begin(), [](char c) { return std::toupper(c); }); //str is now HELLO //Back to lowercase via string_view is not possible. auto sv = std::string_view(str); std::transform(sv.begin(), sv.end(), sv.begin(), [](char c) { return std::tolower(c); }); //ERROR! اگر string_view فقط خواندنی باشد، طول آن به اندازهٔ کافی انعطافپذیر است که از طریق <span <const T به یک نمایش فقط خواندنی تبدیل میشود. بنابراین یک string_view به یک <span <const char نزدیکتر است. البته یک ویژگی وجود دارد که string_view را تضمین میکند. شیء string_view از عملیات std::string-like پشتیبانی میکند. شیء span دارای چندین عملیات متوالی پیوسته است، به عنوان مثال: front, back, begin و operator[]. با این حال، string_view چندین روش دیگر مانند std::string دارد، به عنوان مثال: substr, find, compare سربارگذاری اپراتورها (مانند == و < یا >). بنابراین، string_view میتواند نیازِ به std::string را در مواردی که فضای زیرین آن مهم نیست را از بین ببرد.-
- span
- string_view
- (و 5 مورد دیگر)