در این پروژه، شما باید یک کلاس به نام \`StringList\` را پیادهسازی کنید که شباهت زیادی به کلاس \`PlayList\` دارد، اما به جای ذخیره آهنگها، رشتههای متنی (strings) را نگهداری میکند. وظیفه اصلی شما این است که قابلیت "بازگشت" (undo) را به این کلاس اضافه کنید تا بتوان تغییرات انجام شده در لیست را برگرداند.
### قوانین اصلی پیادهسازی:1. نباید هیچ یک از متدهای موجود در کلاس را حذف کنید یا امضای آنها را تغییر دهید.2. میتوانید تغییراتی در پیادهسازی متدهای موجود بدهید، اما عملکرد آنها نباید تغییر کند.3. باید قابلیت undo را با استفاده از یک پشته (stack) پیادهسازی کنید که فقط داخل کلاس \`StringList\` قابل دسترسی باشد.4. این پشته را باید با یک آرایه پویا (dynamic array) پیادهسازی کنید که در ابتدا ظرفیت آن 4 است و وقتی پر میشود، ظرفیت آن دو برابر میشود.5. متد undo نباید خودش undo شود (نیازی به قابلیت redo نیست).
### نحوه عملکرد undo:هر بار که یکی از متدهای "undoable" فراخوانی شود، باید عملیات معکوس آن متد به بالای پشته اضافه شود. زمانی که متد \`undo()\` فراخوانی شود، عمل معکوس از پشته برداشته شده و اعمال میشود تا تغییر اخیر لغو شود.
مثالها:- برای \`insertBefore\`، اگر یک عنصر به لیست اضافه کنید، باید عمل حذف آن عنصر را به پشته اضافه کنید تا بتوانید با فراخوانی \`undo()\`، آن عنصر را حذف کنید.- برای \`set\`، اگر مقداری را تغییر دهید، مقدار قبلی باید در پشته ذخیره شود تا با \`undo()\` به حالت قبل برگردد.- برای \`remove\`، اگر عنصری را حذف کنید، آن عنصر باید در پشته ذخیره شود تا با \`undo()\` مجدداً به لیست برگردانده شود.
### نحوه ارزیابی:این پروژه 40 نمره دارد:- پیادهسازی undo: 28 نمره- موفقیت در اجرای تستها: 4 نمره- مدیریت حافظه: 4 نمره- سبک کدنویسی: 4 نمره
شما باید برنامه را بهگونهای بنویسید که با استفاده از \`valgrind\`، هیچ خطای حافظهای نداشته باشد و قابل کامپایل در محیط لینوکس باشد.
شما باید پروژه خود را به صورت یک فایل فشرده (.zip) ارسال کنید که فقط شامل فایلهای زیر باشد:
1. \*\*StringList.h\*\*: فایل هدر که شامل تعریف کلاس \`StringList\` و هر تابع یا ساختار کمکی است که اضافه کردهاید.2. \*\*StringList.cpp\*\*: فایل پیادهسازی که شامل تمام متدهای \`StringList\` و پیادهسازی قابلیت undo است.
فایل یا پوشه دیگری نباید در فایل فشرده قرار داده شود.
شرح کامل به صورت عکس همراه با فایل های مورد نیاز ضمیمه شده است
این آگهی از وبسایت پارسکدرز پیدا شده، با زدن دکمهی تماس با کارفرما، به وبسایت پارسکدرز برین و از اونجا برای این شغل اقدام کنین.
هشدار
توجه داشته باشید که دریافت هزینه از کارجو برای استخدام با هر عنوانی غیرقانونی است. در صورت مواجهه با موارد مشکوک، با کلیک بر روی «گزارش مشکل آگهی» به ما در پیگیری تخلفات کمک کنید.