Telegram Web Link
📚 فهرست آموزش های کانال

📓 جلسه اول (مقدمات زبان ++C)
www.tg-me.com/Learncpp/534
📘 جلسه دوم (ساختارهای تکرار و تصمیم گیری)
www.tg-me.com/Learncpp/535
📗 جلسه سوم (آرایه ها)
www.tg-me.com/Learncpp/536
📙 جلسه چهارم (توابع)
www.tg-me.com/Learncpp/537
📽 فیلم های آموزشی
www.tg-me.com/Learncpp/538
💻 نرم افزار های مرتبط
www.tg-me.com/Learncpp/540
🙇🏻 دانستنی ها
www.tg-me.com/Learncpp/539
🌍 ترجمه کتابخانه ها از سایت مرجع ++www.cpluplus.com) C)
فعلا ترجمه کتابخانه ای در کانال قرار نگرفته, در صورتی که ترجمه ای در کانال قرار بگیرد این لیست بروز رسانی خواهد شد

کمک به بچه های سرطانی :
💝 www.tg-me.com/Learncpp/542

⛔️ از آنجا که مطالب کانال از جایی کپی پیس و دزدیده نمی شود و تمامیه مطالب درون word تایپ شده سپس پس از تکمیل داخل کانال قرار می گیرند.
با این شیوه سعی بر این داریم کلیه مطالب را پوشش دهیم به همین خاطر ممکن هست به دلیل گردآوری مطالب، مدت زمانی درون کانال آموزشی قرار نگیرد پس "لطفا صبر پیشه کنید"...
@Learncpp
📌 جلسه اول (مقدمات برنامه نویسی)
www.tg-me.com/Learncpp/84

💡 حافظه چیست
www.tg-me.com/Learncpp/85
💡 داده های صحیح
www.tg-me.com/Learncpp/86
💡 داده های منطقی
www.tg-me.com/Learncpp/87
💡 داده های کاراکتری
www.tg-me.com/Learncpp/88
💡 انواع داده ها و مقادیر قابل قبول
www.tg-me.com/Learncpp/91
💡 انواع داده ها در ++C
www.tg-me.com/Learncpp/92
💡 متغییر چیست و نحوه تعریف متغییر
www.tg-me.com/Learncpp/105
💡 قوانین نامگذاری متغییر ها
www.tg-me.com/Learncpp/107
💡 روش های مقدار دادن به متغییرها
www.tg-me.com/Learncpp/108
💡ثابت ها چیست
www.tg-me.com/Learncpp/112
💡انواع ثابت ها
🎈 با استفاده از define
www.tg-me.com/Learncpp/113
🎈با استفاده از const
www.tg-me.com/Learncpp/115
💡عملگر چیست
www.tg-me.com/Learncpp/118
🎈عملگر انتساب (=)
www.tg-me.com/Learncpp/119
🎈عملگرهای محاسباتی
www.tg-me.com/Learncpp/121
🎈عملگرهای ترکیبی
www.tg-me.com/Learncpp/122
🎈عملگرهای افزایش و کاهش
www.tg-me.com/Learncpp/123
🎈عملگرهای رابطه ای و تساوی
www.tg-me.com/Learncpp/124
🎈تقدم عملگرهای حسابی
www.tg-me.com/Learncpp/129
🎈تقدم عملگرهای ترکیبی
www.tg-me.com/Learncpp/130
🎈تقدم عملگرهای رابطه ای
www.tg-me.com/Learncpp/131
🎈 تقدم عملگرهای منطقی
www.tg-me.com/Learncpp/132
💡ساختار برنامه در ++C
www.tg-me.com/Learncpp/137

📌 پایان آموزش جلسه اول (مقدمات برنامه نویسی)
@Learncpp
📌 جلسه دوم (ساختارهای تکرار و تصمیم گیری در ++C)
www.tg-me.com/Learncpp/174

💡 دستور if و else-if
www.tg-me.com/Learncpp/176
💡 دستور switch
www.tg-me.com/Learncpp/181
💡حلقه تکرار while
www.tg-me.com/Learncpp/186
💡حلقه تکرار do-while
www.tg-me.com/Learncpp/191
💡تفاوت while با do-while
www.tg-me.com/Learncpp/194
💡حلقه ی تکرار for
www.tg-me.com/Learncpp/195
💡تمارین جلسه دوم
www.tg-me.com/Learncpp/205

📌 پایان آموزش دوم (ساختارهای تکرار و تصمیم گیری در ++C)
@Learncpp
📌 جلسه سوم (آرایه ها)
www.tg-me.com/Learncpp/268

💡آرایه چیست
www.tg-me.com/Learncpp/270
💡نحوه تعریف آرایه ها
www.tg-me.com/Learncpp/271
💡آرایه های یک بعدی
www.tg-me.com/Learncpp/273
💡ارسال آرایه ها به توابع
www.tg-me.com/Learncpp/278
💡الگوریتم جستجوی دودویی (binary search)
www.tg-me.com/Learncpp/280
💡مرتب سازی حبابی (Bubble sort)
www.tg-me.com/Learncpp/283
💡آرایه های چند بعدی
www.tg-me.com/Learncpp/296
💡آرایه های دو بعدی
www.tg-me.com/Learncpp/298
💡جستجوی خطی
www.tg-me.com/Learncpp/301
💡تمارین جلسه سوم
www.tg-me.com/Learncpp/315

📌 اتمام جلسه سوم (آرایه ها)
@Learncpp
📌 جلسه چهارم (توابع)
www.tg-me.com/Learncpp/400

💡تابع چیست
www.tg-me.com/Learncpp/401
💡دلایل استفاده از توابع در برنامه ها
www.tg-me.com/Learncpp/402
💡مزایای استفاده از توابع
www.tg-me.com/Learncpp/403
💡نوشتن توابع
www.tg-me.com/Learncpp/404
💡تعریف توابع
www.tg-me.com/Learncpp/405
💡نحوه تعریف توابع در ++C
www.tg-me.com/Learncpp/406
💡نحوه استفاده از الگوی تابع در ++C
www.tg-me.com/Learncpp/410
💡توابع چگونه کار می کنند
www.tg-me.com/Learncpp/414
💡نحوه پرش آرگومانها درون پارامترها
www.tg-me.com/Learncpp/415
💡نحوه فراخوانی چندین تابع درون main
www.tg-me.com/Learncpp/417
💡روش ارسال پارامترها به توابع
www.tg-me.com/Learncpp/420
💡روش call by value برای ارسال پارامترها به توابع
www.tg-me.com/Learncpp/421
🎈توابعی که یک هیچ مقدار بر نمی گردانند
www.tg-me.com/Learncpp/422
🎈توابعی که یک مقدار بر می گردانند
www.tg-me.com/Learncpp/423
💡روش call by reference برای ارسال پارامترها به توابع
www.tg-me.com/Learncpp/424
💡 توابع inline در ++C
www.tg-me.com/Learncpp/425
💡آرگومان های پیش فرض در ++C
www.tg-me.com/Learncpp/433
💡سربارگذاری توابع در ++C
www.tg-me.com/Learncpp/439
💡قالب توابع (Template) چیست
www.tg-me.com/Learncpp/450
🎈نحوه تعریف template در ++C
www.tg-me.com/Learncpp/451
🎈نحوه تعیین نوع داده از طریق مقادیر آرگومان ها
www.tg-me.com/Learncpp/453
🎈تعریف مجدد توابع کلی
www.tg-me.com/Learncpp/456
🎈تعریف مجدد template ها
www.tg-me.com/Learncpp/459
💡آرایه ها به عنوان آرگومان های توابع
www.tg-me.com/Learncpp/477
💡ارسال آرایه های یک بعدی به آرایه ها
www.tg-me.com/Learncpp/478
💡ارسال آرایه های دو بعدی به آرایه ها
www.tg-me.com/Learncpp/479
💡کلاس حافظه (storage class) در ++C
www.tg-me.com/Learncpp/482
🎈کلاس حافظه اتوماتیک (auto)
www.tg-me.com/Learncpp/483
🎈کلاس حافظه ثبات (register)
www.tg-me.com/Learncpp/487
🎈کلاس حافظه استاتیک (static)
www.tg-me.com/Learncpp/502
🎈کلاس حافظه خارجی (extern)
www.tg-me.com/Learncpp/507
💡تمارین جلسه چهارم
www.tg-me.com/Learncpp/518

📌 اتمام جلسه چهارم (توابع)
@Learncpp
📽 فیلم های آموزشی کانال

👁‍🗨 معرفی تاریخچه ++C و آموزش نصب کدبلاکس و نحوه خروجی گرفتن
www.tg-me.com/Learncpp/147
👁‍🗨 تفاوتهای C با ++C (قسمت اول)
www.tg-me.com/Learncpp/149
👁‍🗨 تفاوتهای C با ++C (قسمت دوم)
www.tg-me.com/Learncpp/156
👁‍🗨 آموزش Switch در ++C (قسمت اول)
www.tg-me.com/Learncpp/220
👁‍🗨 آموزش Switch در ++C (قسمت دوم)
www.tg-me.com/Learncpp/221
👁‍🗨 حلقه ها (قسمت اول)
www.tg-me.com/Learncpp/223
👁‍🗨 حلقه ها (قسمت دوم)
www.tg-me.com/Learncpp/224
👁‍🗨 نام گذاری متغییر ها و آشنایی با شرط if
www.tg-me.com/Learncpp/248
👁‍🗨 اعمال اولیه ریاضی (قسمت اول)
www.tg-me.com/Learncpp/250
👁‍🗨 اعمال اولیه ریاضی (قسمت دوم)
www.tg-me.com/Learncpp/252
👁‍🗨 حلقه for و مثال هایی از break و continue
www.tg-me.com/Learncpp/255
👁‍🗨 مثال هایی از حلقه for
www.tg-me.com/Learncpp/258
👁‍🗨 نگه داری متغییر ها در حافظه و تبدیل مبناها
www.tg-me.com/Learncpp/260
👁‍🗨 اعداد باینری و اعمال ریاضی بر روی آنها
www.tg-me.com/Learncpp/262
👁‍🗨 آرایه ها
www.tg-me.com/Learncpp/264
👁‍🗨آموزش تابع نویسی
www.tg-me.com/Learncpp/525
👁‍🗨 توابع-حوزه متغییر-کلاس حافظه
www.tg-me.com/Learncpp/529
👁‍🗨 آموزش template - inline
www.tg-me.com/Learncpp/530
👁‍🗨 آموزش template
www.tg-me.com/Learncpp/531
@Learncpp
🙇🏻 دانستنی ها

⛔️ دیگه داخل کانال دانستنی گفته نمیشه مگر اینکه موضوعی باشه که مرتبط به آموزشهایی که قرار هست در کانال گفته شود نباشد

💡کامپیوتر چیست
www.tg-me.com/Learncpp/17
💡تکامل سیستم عامل ها
www.tg-me.com/Learncpp/18
💡برنامه نویسی چیست
www.tg-me.com/Learncpp/19
💡زبان های برنامه نویسی چیست
www.tg-me.com/Learncpp/20
💡انواع زبان های برنامه نویسی چیست
www.tg-me.com/Learncpp/21
🎈زبان سطح پایین
www.tg-me.com/Learncpp/22
🎈زبان سطح میانی
www.tg-me.com/Learncpp/23
🎈زبان سطح بالا
www.tg-me.com/Learncpp/24

💡آشنایی با زبان های برنامه نویسی
🎈زبان برنامه نویسی ++C
www.tg-me.com/Learncpp/27
🎈زبان برنامه نویسی JAVA
www.tg-me.com/Learncpp/28
🎈زبان برنامه نویسی #C
www.tg-me.com/Learncpp/29
🎈زبان برنامه نویسی Basic
www.tg-me.com/Learncpp/30
🎈زبان برنامه نویسی Pyton
www.tg-me.com/Learncpp/31
🎈زبان برنامه نویسی perl
www.tg-me.com/Learncpp/32
🎈زبان برنامه نویسی php
www.tg-me.com/Learncpp/33
🎈زبان برنامه نویسی VB.Net
www.tg-me.com/Learncpp/34
🎈زبان برنامه نویسی Delphi
www.tg-me.com/Learncpp/35
🎈زبان برنامه نویسی Visual Basic
www.tg-me.com/Learncpp/36
💡محیط های نوشتن و کامپایل کد به زبان ++C
🎈محیط Turbo C
www.tg-me.com/Learncpp/42
🎈محیط Turbo C++
www.tg-me.com/Learncpp/43
🎈محیط Borland C++
www.tg-me.com/Learncpp/44
🎈محیط Microsoft C++/C
www.tg-me.com/Learncpp/45
🎈محیط Code Blocks
www.tg-me.com/Learncpp/49
🎈محیط Kdevelop
www.tg-me.com/Learncpp/50
🎈محیط Anjuta
www.tg-me.com/Learncpp/51
🎈محیط Code Lite
www.tg-me.com/Learncpp/52
🎈محیط Dev ++C
www.tg-me.com/Learncpp/53
🎈محیط Qt
www.tg-me.com/Learncpp/55
💡کامپایلر چیست
www.tg-me.com/Learncpp/59
💡کامپایلر Mingw
www.tg-me.com/Learncpp/60
💡کامپایلر GCC
www.tg-me.com/Learncpp/61
💡کامپایلر Tiny C Coumpiler
www.tg-me.com/Learncpp/62
💡کامپایلر ideone
www.tg-me.com/Learncpp/63
💡مراحل ایجاد پروژه در Visual Studio
www.tg-me.com/Learncpp/158
💡مراحل ایجاد پروژه در Code Blocks
www.tg-me.com/Learncpp/166
💡مراحل قرار دادن کلاس در فایل های جداگانه در VS2013
www.tg-me.com/Learncpp/346
💡خطایابی با استفاده از تابع assert
www.tg-me.com/Learncpp/230
💡استفاده از کروشه { }
www.tg-me.com/Learncpp/233
💡توابع decltype و auto
www.tg-me.com/Learncpp/234
💡تفاوت فراخوانی call by value با call by reference در struct ها
www.tg-me.com/Learncpp/235
💡نحوه فراخوانی سازنده کلاس پدر داخل سازندهکلاس فرزند با استفاده از کاراکتر دو نقطه (:)
www.tg-me.com/Learncpp/236
💡مفهوم قرار دادن & قبل از اسم توابع
www.tg-me.com/Learncpp/241
💡تفاوت صدا زدن یک تابع در کلاس ها و struct ها
www.tg-me.com/Learncpp/308
💡اجرای دستورات cmd در ++C
www.tg-me.com/Learncpp/364
💡استفاده از براکت برای ایجاد محدوده
www.tg-me.com/Learncpp/374
@Learncpp
دخترک 6 سال که سرطان داشت

قبل از ورود به اتاق عمل

با چشمای لرزون روبه پرستار گفت :

من مامان بابام پول درمانمو ندارن

میشه قبل از عمل بمیرم 😔 ...

دوستای گلم با 100 تومن تک تومنی هم میشه دل یک خانواده رو که جگرگوششون کنج بیمارستان بخاطر بیماری سرطان و هزینه های سنگین بیمارستانها داره جلو چششون ذره ذره آب میشه رو با همین 100 تومنی های ناچیز شاد کرد تا حداقل با همین اندک کمک, کمی از درد و رنج این خانواده ها برداشته بشه🙏
☎️ 021-23540
🔹سایت رسمی محک برای کمک به بیماران سرطانی
www.mahak-charity.org/main/index.php/fa/how-do-i-help-my-mahak/i-want-to-help/types-of-individual-assistance
🔹کمک رسانی آنلاین
www.mahak-charity.org/main/index.php/fa/mahak-products/payments
🔹با شماره گیری کد زیر از طریق اپراتورهای مخابرات هم میتونید کمک های نقدیتونو به حساب سایت محک واریز کنید
*733*7*2#
🔹کانال رسمی موسسه خیریه محک
@mahakcharitynews

تمامیه اطلاعات بالا معتبر و مرتبط به سازمان خیریه محک هست و هیچ گونه سوءاستفاده ای در کار نخواهد بود و نیست
آموزش برنامه نویسی ++C از مبتدی به پیشرفته در کانال
@Learncpp
#cpp #cplusplus
عرض سلام خدمت اعضای محترم
قبلا یک پستی در خصوص ترجمه کتابخانه های STL گذاشته شد که چند تن از اعضای علاقه مند کمک کردن و به ترجمه کتابخانه ها از سایت رسمی ++C به نشانی www.cplusplus.com پرداختن, حال پس از تکمیل, ترجمه برای استفاده عموم داخل کانال قرار داده می شوند
فقط بدلیل مشغله به مدت یک ماه آموزش بعدی یعنی اشاره گرها داخل کانال قرار نخواهد گرفت ولی برای اینکه کانال نخوابه هر شب فقط یک تابع از کتابخانه مورد نظر داخل کانال قرار خواهد داد
@Learncpp
زحمت ترجمه کتابخانه vector رو آقای "عبدالرحمان آزادی" کشیدن که از ایشون بابت کمکشون سپاسگذارم 🌹
#vector
🔵 وکتور(vector) چیست

خوب اول ما باید بدونیم وکتور یا همون بردار چیه تا بتونیم تشخیص بدیم که کجا باید ازش استفاده کنیم شما تا حالا حتما از آرایه ها استفاده کردید و حتما بزرگ ترین مشکل آرایه ها رو هم میدونید و اون مشکل همون ثابت بودن طول آرایه است، یعنی شما اول یک آرایه با طول مشخص تعیین میکنید بعد فقط و فقط به همون تعدادی که تعریف کردید میتونید داده داخل آرایه تعریف کنید که این خصوصیت مشکلات زیادی رو به دنبال داره اگه یک ذره تو عمق برنامه نویسی رفته باشید حتما تونستید راه حل این مشکل رو پیدا کنید و اون راه حل حتما استفاده از لینک لیست ها (linklist) به جای آرایه است. خوب لینک لیست هم مشکلات خودش رو داره که مهم ترین مشکلش پیاده سازیشه یعنی شما باید کلی وقت بزارین یک لینک لیست طراحی کنین تا بتونید ازش تو برنامه های مختلف استفاده کنید یکی دیگه از مشکلاتش اینه که لینک لیست داده هایی با انواع ثابت رو میتونه تو خودش نگهداره یعنی وقتی شما لینک لیستتون رو واسه نوع int تعریف میکنید فقط میتونید نوع int رو داخلش ذخیره کنید.
حالا سی پلاس اومده وکتور(vector) رو طراحی کرده تا همه ی این مشکلات رو یه جا از بین ببره. شما توی وکتور میتونید هر نوع داده ای رو حتی داده های تعرف شده توسط کاربر یا همون struct رو یا حتی یه کلاسی رو که خودتون طراحی کردید رو داخلش ذخیره کنید حتی میتونید داده ها رو مثل آرایه ها با اندیسشون بخونید یکی دیگه از خواصش اینه که وکتور میتونه تا n داده رو داخله خودش ذخیره کنه که n بستگی به حجم حافظه ی شما داره یا اینکه می تونید به اول و وسط و آخر وکتور داده ای اضافه یا حذف کنید
اما پیاده سازی وکتور چطوریه؟
کار وکتور مثه اینه که وقتی می خواهید یه داده ی جدید رو به لیست ما اضافه کنه میاد یه آرایه با طول خود لیست به اضافه ی یک تعریف میکنه ، بعد کل لیست رو منتقل میکنه تو لیست جدید و بعدشم داده ی جدید رو به ته لیست اضافه میکنه. سی پلاس این کارو نمیکنه . چرا ؟؟؟ شما بیایید فرض کنید 1000000 تا داده داخل لیست ما قرار داره و ما میخواییم یه داده به ته لیست اضافه کنیم خوب طبق تعریف قبل ما باید بیاییم یه آرایه با طول 1000001 تعریف کنیم بعد 1000000 تا داده ی اولی رو بریزیم تو 1000000 عنصر اول آرایه بعدم اون یه دونه داده رو به خونه ی 1000001 اضافه کنیم . خوب به نظر شما انتقال 1000000 داده به یه لیست جدید چقد طول میکشه ؟؟؟ و این زمان اصلا به صرفه نیست پس وکتور چجوری داده ها رو ذخیره میکنه ؟؟؟ باید بگم خود سایت سی پلاس هیچ حرفی در این مورد نزده و فقط گفته که از استراتیژی های خاصی استفاده میکنه.
و اما بریم سر بحث انواعی که میتونیم داخل وکتور ذخیره کنیم یا به قول سایت سی پلاس Template parameters . ما میتونیم داخل وکتور هر نوع داده ای رو که بهش میدیم رو ذخیره کنیم و صد البته فقط همون نوعی رو میتونیم ذخیره کنیم که بهش معرفی میکنیم . اگه int معرفی کردیم فقط int ، اگه char معرفی کردیم فقط char و خلاصه . حتی میتونیم یه کلاس رو داخلش ذخیره کنیم یا حتی یه struct یا unionو حتی یه وکتور دیگه ...
و اما به عنوان ورودی های وکتور غیر از Template parameters که اجباریه یه ورودیه اختیاری هم میتونیم به وکتور بدیم و اون هم یه تخصیص دهنده است.
حالا تخصیص دهنده چیه؟
تخصیص دهنده همون موتوریه که کارش گرفتنه حافظه واسه داده ها مونه البته این دیگه خیلی تخصصی میشه و داخل خود سایت سی پلاس هم توضیح نداده پس منم توضیح نمیدم
🔰ترجمه شده از سایت www.cplusplus.com

🔻توضیحات اضافه
از مطلب بالا میشه نتیجه گرفت که استفاده از وکتور ها(بردار ها) قابلیت های زیر را به برنامه نویس می دهند:

🔹کارکرد وکتورها شبیه آرایه هاست
🔹در وکتورها میتوانیم قبل از تعریف اندازه وکتور را از کاربر بگیریم
🔹 پس از تعریف وکتورها میتوانیم ظرفیت وکتور(طول وکتور) را به اندازه دلخواه زیادتر کنیم
🔹پس از تعریف وکتورها می توانیم در ابتدا, اواسط یا انتهای وکتور مقداری را اضافه یا حذف کنیم
@Learncpp
#vector
🔵 وکتور(vector)

🔻توضیحات اضافه

🔹نحوه فراخوانی هدر وکتور
#include <vector>
🔹نحوه تعریف وکتور
vector <data type> vector_name;

vector <data type> vector_name(ظرفیت اولیه);

vector <data type> vector_name(ظرفیت اولیه,مقدار اولیه);

vector <data type> vector_name(اشاره گر ابتدای حافظه,اشاره گر انتهای حافظه)


🔹نوع داده ها(data type): توضیحات بیشتر در پست www.tg-me.com/Learncpp/91
@Learncpp
#vector #pop_back
🔵 وکتور(vector)

🔹تابع pop_back
void pop_back();


این متد بدون هیچ شرطی آخرین عنصر موجود در وکتور رو حذف میکنه ، ولو یه عنصر باشه . همون طور که میبینید هیچ پارامتر یا مقدار بازگشتی هم ندارد
#include <iostream>

#include <vector>


int main ()

{

std::vector<int> myvector;

int sum (0);//sum=0

myvector.push_back (100);

myvector.push_back (200);

myvector.push_back (300);

while (!myvector.empty())

{

sum+=myvector.back();

myvector.pop_back();

}

std::cout<<"The elements of myvector add up to"<<sum<<'\n';

return 0;

}

Output :
The elements of myvector add up to 600
این برنامه سه تا داده رو به وکتور اضافه میکنه بعد با یه حلقه مقدار آخرین عنصر رو با یه متغییر جمع میزنه بعدم همون عنصر رو حذف میکنه تا موقعی که وکتور کاملا خالی بشه
🔰ترجمه شده از سایت www.cplusplus.com
@Learncpp
#vector #push_back
🔵 وکتور(vector)

🔹تابع push_back
void push_back (const value_type& val);

void push_back (value_type&& val);


تابع push_back یه عنصر به آخر وکتور اضافه میکند این عنصری که ما به آخر وکتور اضافه میکنیم هم میتونه مقدار یک متغییر باشد هم یک مقدار صریح که ما به متد میدیم. وقتی ما یه عنصر به آخر وکتور اضافه میکنیم پس قطعا طول اون هم بیشتر میشه و حتی ممکنه ظرفیت (capacity) وکتور هم بیشتر بشه
این متد خودش اتوماتیک میتونه حافظه ی مورد نیازه داده ی جدید رو تخصیص بده

پارامتر ها:
متغییر val: همون عنصری که باید به آخر وکتور اضافه بشه
#include <iostream>

#include <vector>


int main ()

{

std::vector<int> myvector;

int myint;

std::cout<<"Please enter some integers(enter 0 to end):\n";

do {

std::cin>>myint;

myvector.push_back (myint);

}

while (myint);

std::cout<<"myvector stores "<<int(myvector.size())<<" numbers.\n";

return 0;

}

در مثال بالا ما یک سری داده رو از کاربر میگریم و تا موقعی که اون داده 0 نیست داده ها رو به آخر وکتور اضافه میکنیم به همین سادگی.
🔰ترجمه شده از سایت www.cplusplus.com
@Learncpp
#vector #insert
🔵 وکتور(vector)

🔹تابع Insert(قسمت اول)
single:

element iterator insert (const_iterator position,const value_type& val);


fill:

iterator insert (const_iterator position,size_type n,const value_type& val);


range:

template <class InputIterator>

iterator insert (const_iterator position,InputIterator first,InputIterator last);


move:

iterator insert (const_iterator position,value_type&& val);


initializer list:

iterator insert (const_iterator position,initializer_list<value_type> il);


متد insert میتونه یه یا چند عنصر را داخل یک جای مختلف از وکتور اضافه بکند, مثلا میتواند 5 تا عنصر جدید بعد از دهمین عنصر داخل وکتور اضافه کند, تازه میتوانیم یک بازه ی جدید به یک جای خاص از وکتورمان اضافه کنیم و یک مقدار پیشفرض داخلشون کپی کنیم.
توجه کنید که ما با اضافه کردن یک یا چند داده هیچ فضایی را برای آنها دوباره از سیستم نمیگریم، چون قبلا یک بازه ای از حافظه رو برای وکتور از سیستم گرفتیم (برای اطلاعات بیشتر رجوع شود به capacity). فقط در صورتی دوباره فضا میگریم که ظرفیت موجود برای وکتور (capacity) کم باشد و داده ها داخلش جا نگیرند.

🔹مفهوم Single element:
با این اورلود میتونیم فقط یه عنصر جدید به موقعیت position وکتور اضافه کنیم

🔹مفهوم Fill:
با این اورلود میتوانیم یک بازه ی جدید به طول n از موقعیت position با مقدار پیش فرض val اضافه کنیم

🔹مفهوم Range:
با این میتوانیم یک دسته از عناصر جدید مثل یک آرایه یا یک وکتور دیگه را به موقعیت position اضافه کنیم

🔹مفهوم Move:
با این میتوانیم مقدار یک متغییر را اضافه کنیم

🔹مفهوم Initializer list:
با این میتوانیم یک دسته از داده هایی با نوع نا معلوم را به وکتور اضافه کرد

پارامتر ها :
🔹پارامتر Position:
موقعیتی از وکتور هست که می خواهیم داده های جدید به آن موقعیت اضافه شوند. دقت کنید که هیچ داده ای قبل از position قرار نمیگیرد و همه ی داده از position به بعد داخل وکتور قرار میگیرند

🔹پارامتر Val:
همان مقداری هست که می خواهیم به وکتور اضافه شود یا به عنوان مقدار پیشفرض تو بازه ی جدید جا بگیرد

🔹پارامتر n:
طول بازه ی جدیدی هست که ما می خواهیم به وکتورمان اضافه کنیم

🔹پارامتر First,last:
این دوتا میتوانند یا iterator هایی به اول و آخر یک وکتور دیگه باشند یا اشارگر هایی به اول و آخر یک آرایه. کل داده هایی که بین این دوتا اشارگر قرار میگیرند به وکتور اضافه میشوند

🔹پارامتر Li:
همان لیست با نوع نامعلوم هست

🔹مقادیر بازگشتی:
یک iterator به اولین عنصری که به وکتور اضافه شده. اگر یکی باشد به همان یکی اشاره میکند

1.#include <iostream>

2.#include <vector>


3.int main ()

4.{

5.std::vector<int> myvector(3,100);

6.std::vector<int>::iterator it;

7.it=myvector.begin();

8.it=myvector.insert(it,200);

9.myvector.insert(it,2,300);

10.//"it" no longer valid, get a new one:

11.it=myvector.begin();

12.std::vector<int> anothervector(2,400);

13.myvector.insert(it+2,anothervector.begin(),anothervector.end());

14.int myarray []={501,502,503};

15.myvector.insert(myvector.begin(),myarray,myarray+3);

16.std::cout<<"myvector contains:";

17.for(it=myvector.begin();it<myvector.end();it++)

18.std::cout<<' '<<*it;

19.std::cout<<'\n';

20.return 0;

21.}


22.Output:
23.myvector contains: 501 502 503 300 300 400 400 200 100 100 100


خط 5:
5.std::vector<int> myvector(3,100);
تعریف یک وکتور با طول 3 و مقدار پیشفرض 100, پس تا الان :
100 100 100

خط 8:
8.it=myvector.insert(it,200);
دادن یک iterator و مقدار 200 به متد. چون این iterator به اول وکتور اشاره میکند پس این مقدار به اول وکتور اضافه میشود, نتیجه :
200 100 100 100

خط 9:
9.myvector.insert(it,2,300);
دادن یک iterator ، یک طول و یک مقدار پیشفرض, دقت کنید که it هم اکنون به اول همان وکتور اولی اشاره میکند (یعنی اولین 100) چرا ؟ چون ما آن را مقدار دهی کردیم ولی بعد از اینکه محتویات وکتور را تغییر دادیم دوباره آن را مقدار دهی نکردیم, اما چون در خط 8 it را مساوی با مقدار بازگشتی متد insert گذاشتیم پس دوباره به اول همین وکتور اشاره میکند چرا ؟ چون متد insert یک اشاره گر به اولین داده ای که وارد وکتور میشود برمیگرداند که اینجا از قضا اولین داده ی وارد شده همان اولین داده ی داخل وکتورهست, پس :
300 300 200 100 100 100

خط 12:
12.std::vector<int> anothervector(2,400);
تعریف یک وکتور دیگر به طول 2 و مقدار 400

🔰ترجمه شده از سایت www.cplusplus.com
@Learncpp
#vector #insert
🔵 وکتور(vector)

🔹تابع Insert(ادامه قسمت اول)

خط 13:
13.myvector.insert(it+2,anothervector.begin(),anothervector.end());
دادن یک iterator که به دومین موقعیت وکتور اشاره میکند و دوتا iterator که به اول و آخر یک وکتور دیگر اشاره میکند, پس :
300 300 400 400 200 100 100 100
خط 14:
14.int myarray []={501,502,503};
تعریف یک آرایه و دادن مقادیری به آن

خط 15:
15.myvector.insert(myvector.begin(),myarray,myarray+3);
دادن یک iterator به اولین عنصر وکتور (متد begin() ) و دادن دو اشاره گر که یکی به اول و یکی به آخر آرایه اشاره میکند, در نتیجه:
501 502 503 300 300 400 200 100 100 100

🔰ترجمه شده از سایت www.cplusplus.com
@Learncpp
#vector #erase
🔵 وکتور(vector)

🔹تابع erase
iterator erase(const_iterator position);

iterator erase(const_iterator first,const_iterator last);


این تابع یک متد برای حذف کردن هست, برای حذف ما دو روش داریم یکی اینکه میتوانیم داده های داخله وکتور را حذف کنیم یا یک بازه از داده ها را ، مثلا از عنصر 4 تا 12 یا عنصر 4 تا آخر وکتور

پارامتر ها :
🔹مفهوم Position:
یک const_iterator به عنصری که میخواهیم حذف شود

🔹مفهوم First,last:
این ها دو const_iterator هستند که به اول و آخر آن بازه ای از داده ها که قراره از وکتور حذف شوند

🔹مقادیر بازگشتی:
یک iterator به اولین عنصر است که بعد از عنصری که حذف میشود, فرض کنید عنصر 4 حذف شده پس این متد یک اشاره گر به عنصر 5 به ما می دهد ولی چون عنصر 4 حذف شده پس عنصر 5 به جای 4 می آید پس در واقع یک اشاره گر به عنصر 4 به ما می دهد
1.#include <iostream>

2.#include <vector>


3.int main()

4.{

5.std::vector<int> myvector;

6.//set some values(from 1 to 10)

7.for(int i=1;i<=10;i++) 

8.myvector.push_back(i);

9.//erase the 6th element

10.myvector.erase(myvector.begin()+5);

11.//erase the first 3 elements:

12.myvector.erase(myvector.begin(),myvector.begin()+3);

13.std::cout<<"myvector contains:";

14.for(unsigned i=0;i<myvector.size();++i)

15.std::cout<<' '<<myvector[i];

16.std::cout<<'\n';

17.return 0;

18.}


Output:
myvector contains: 4 5 7 8 9 10

در این مثال یک وکتور تعریف شده و اعداد 1 تا 10 را داخل وکتور قرار می دهیم بعد 6مین عنصر را حذف میکنیم چون begin خودش به اولین عنصر اشاره میکند پس begin+1 به دومین عنصر اشاره میکند تا begin+5 به ششمین عنصر, سپس در خط 12, 3 عنصر اول وکتور را حذف میکند, دقت کنید که عنصر begin+3 حذف نمی شود

🔰ترجمه شده از سایت www.cplusplus.com
@Learncpp
#vector #capacity
🔵 وکتور(vector)

🔹تابع capacity
size_type capacity() const noexcept;

این متد که شاید یکی از هوشمندانه ترین تکتنیک های گرفتن حافظه است, البته این متد که هیچ حافظه ی تخصیص یا پس نمی دهد
ما اگر بخواهیم هر بار یک داده ی جدید را به وکتورمان اضافه کنیم باید یک بار یک تابع را برای گرفتن حافظه ی مورد نیازه آن داده فراخوانی کنیم که کلی زمان را از دست می دهیم پس می آییم برای یک بازه ی مشخص از عناصر یک جا حافظه میگریم البته این بازه دست ما نیست و خود کتابخانه مراحلش را انجام میدهد، ولی یک توضیح بهتون میدم ...
اول بازه ها رو بهتون میگم که چجوری هستش ...
0 1 2 4 8 16 32 64 128 ...
اگر ما هیچ داده ای داخل وکتور نداشته باشیم مقدار حافظه ای که وکتور از سیستم می گیرد 0 هست اگه یک داده داشته باشیم بازم 1 هست اگه 2 تا داده باشیم بازم 2 هست اگه 3 تا داده داشته باشیم مقدارش میشه 4. بزارین ساده تر بگم مثلا برای تعداده داده هایی بین 16 تا 32 ما میاییم 32 تا حافظه میگیریم حتی اگه تعداد داده هامون 20 تا باشه یا مثلا اگه تعداد داده هامون 50 تا باشه وکتور میاد 64 تا حافظه میگیرد
فایدشم اینه که ما مجبور نیسیتیم برای هر داده ای که وارد وکتور می کنیم یک بار یه تابع را برای گرفتن حافظه صدا بزنیم پس با این روش سرعتمون بیشتر می شود ...

🔹مقادیر بازگشتی:
بازه ای که برایش حافظه گرفته شده را برمیگرداند

#include <iostream>

#include <vector>

using namespace std;


int main()

{

vector<int> a;

cout<<a.capacity()<<endl;

a.push_back(1);

cout<<a.capacity()<<endl;

a.push_back(2);

cout<<a.capacity()<<endl;

a.push_back(3);

cout<<a.capacity()<<endl;

a.push_back(4);

a.push_back(5);

a.push_back(6);

cout<<a.capacity()<<endl;

a.push_back(7);

a.push_back(8);

a.push_back(9);

cout<<a.capacity()<<endl;

return 0;

}


Output:
0
1
2
4
8
16

مقدار حافظه ای که وکتور می گیرد یک مسیر تصاعدی دارد

🔰ترجمه شده از سایت www.cplusplus.com
@Learncpp
2025/07/01 11:35:26
Back to Top
HTML Embed Code: