Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
🙇🏻 دانستنی ها

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

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

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

🔹تابع clear
void clear() noexcept;
این متد کل محتویات وکتور رو پاک میکند
ما میتوانیم با یک روش دیگر هم کل عناصر وکتور رو پاک کنیم
vector<T>().swap(x);
به جای T نوع وکتور و به جای x اسم وکتور را قرار می دهیم
#include <iostream>
#include <vector>

int main ()
{
std::vector<int> myvector;
myvector.push_back (100);
myvector.push_back (200);
myvector.push_back (300);
std::cout<<"myvector contains:";
for(unsigned i=0;i<myvector.size();i++)
std::cout<<' '<<myvector[i];
std::cout<<'\n';
myvector.clear();
myvector.push_back(1101);
myvector.push_back(2202);
std::cout<<"myvector contains:";
for(unsigned i=0;i<myvector.size();i++)
std::cout<<' '<<myvector[i];
std::cout<<'\n';
return 0;
}


Output:
myvector contains: 100 200 300
myvector contains: 1101 2202

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

🔹تابع size
size_type size() const;


تعداد عناصری که داخل وکتور ذخیره شده را برمیگرداند, تعداد عناصر هیچ ربطی به نوع یا اندازه ی عناصر ندارد

🔹مقادیر بازگشتی :
تعداد عناصر ذخیره شده داخل وکتور
#include <iostream>

#include <vector>

using namespace std;


int main ()

{

vector<int> myints;

cout<<"0.size: "<<myints.size()<<'\n';


for(int i=0;i<10;i++)

myints.push_back(i);

cout<<"1.size: "<<myints.size()<<'\n';


myints.insert(myints.end(),10,100);

cout<<"2.size: "<<myints.size()<<'\n';


myints.pop_back();

cout<<"3.size: "<<myints.size()<<'\n';


return 0;

}


Output:
size: 0
size: 10
size: 20
size: 19

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

🔹تابع reserve
void reserve (size_type n);

با این متد میتوانیم بازه ای از حافظه را که برای داده ها گرفته شده تغییر بدیم. برای اطلاعات بیشتر به capacity مراجعه شود. شما میتوانید این بازه را به هر اندازه ای که خواستید تغییر بدین حتی اگر این بازه جزء توان های 2 نباشد و در ضمن شما هیچ وقت نمیتوانید این بازه را بیشتر از max_size کنید و اگر تلاش کنید که همچین کاری انجام بدین این متد یک error را داخل کلاس length_error تنظیم میکند و صد البته نمیتوانید مقدار این بازه را از تعداد عناصر وکتور کمتر کنید و دو صد البته که نمیتوانید مقدار این بازه را از بازه ی فعلی هم کمتر کنید یعنی اگر مثلا تعداد عناصرمان 10 تا باشد، بازه ی حافظمان 16 تا می شود و ما نمیتوانیم این بازه را با تابع reserve از 16 تا کمتر کنیم
❌مفهوم length_error:
این کلاس نوعی از اشیا را که یک استثنا برای گزارش طول خطا پرتاب می کند تعریف می کند

🔹پارامتر ها :
🔻متغییر n
اندازه ی بازه ای که می خواهیم وکتور به آن تغییر اندازه دهد

#include <iostream>

#include <vector>

using namespace std;


int main()

{

vector<int> a;

for(int i=0;i<=10;i++)

a.push_back(i);

a.reserve(100);

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

return 0;

}


Output:
100
همان طور که میدانید بازه ی استاندارد برای این وکتور 16 هست ولی ما آن را به 100 تغییر دادیم

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

🔹تابع resize
void resize (size_type n);
void resize (size_type n, const value_type& val);

این متد می تواند اندازه ی فعلی وکتور را عوض کند ما در تعریف وکتور با یک اورلود می توانستیم همزمان با تعریف وکتور اندازه ی آن را هم مشخص کنیم حالا با این تابع میتوانیم اندازه ی وکتور را عوض کنیم.
اگر اندازه ایی که می دهیم از اندازه ی فعلی خود وکتور کمتر باشد داده هایی که در قسمت آخر وکتور ذخیره شده اند را از بین می برد ولی اگه بیشتر باشد آن را با مقدار 0 پر می کند مگر اینکه مقدار val را به آن بدهیم, اگر val را مقدار دهی کنیم و n هم بزرگتر از اندازه ی فعلی خود وکتور باشد خانه های اضافی را با مقدار val پر می کند.

🔹پارامتر ها:
🔻متغییر n
این میزان اندازه ایی هست که قرار هست وکتور به این میزان تغییر اندازه دهد

🔻متغییر val
اگر n بزرگتر از اندازه ی فعلی خود وکتور باشد خانه های اضافی با این مقدار پر میشوند و اگر مقدار دهی نشوند خانه های اضافی با 0 پر می شوند

#include <iostream>
#include <vector>

int main ()
{
1.std::vector<int> myvector;

2.//set some initial content:
3.for(int i=1;i<10;i++)
4.myvector.push_back(i);

5.myvector.resize(5);
6.myvector.resize(8,100);
7.myvector.resize(12);

8.std::cout<<"myvector contains:";
9.for(int i=0;i<myvector.size();i++)
11.std::cout<<' '<<myvector[i];
12.std::cout<<'\n';

11.return 0;
12.}

Output:
myvector contains:1 2 3 4 5 100 100 100 0 0 0 0

با اجرای خط 3 اندازه ی وکتور 10 می شود چون ده تا عدد داخل وکتور ذخیره می کنیم با خط 4 اندازه وکتور به 5 تغییر پیدا میکند که 5 تا داده ی آخر از بین می روند. با خط 5 اندازه اش 8 می شود که 3 تای آخر با 100 مقدار دهی میشوند ،5 تای اول هم که خودشان مقدار دارند. با خط 6 اندازه اش 12 تا می شود که 4 تای آخر با 0 مقدار دهی می شوند، 8 تای اول هم که خودشان مقدار دارند

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

🔹تابع max_size
size_type max_size( ) const;

این متد تعداد بیشترین عناصری را که می توانیم داخل وکتور ذخیره کنیم را به ما می دهد، می دانید که وکتور هم یک حافظه ای دارد که ممکن است با پر شدنش تمام شود، حال اگر قرار باشد تعداد بیشتری عنصر را داخل وکتور ذخیره کنید می توانید یک کلاس تعریف کنید و به گونه ای تنظیم شود که تا زمانی که اولی پر نشده هیچ عنصری داخل وکتور دوم نرود و به همین ترتیب برای دیگر وکتورها هم همینطور عمل کنید

🔹مقادیر بازگشتی :
بیشترین تعداد عناصری که می توانیم در وکتور ذخیره کنیم
#include <iostream>
#include <vector>
using namespace std;

int main( )
{
vector<int> a;
cout<<a.max_size( )<<endl;
return 0;
}


Output :
1073741823

مثال)
#include <iostream>
#include <vector>
using namespace std;

class vec
{
public:
vector<int> vec1;
vector<int> vec2;
void push_back(int data);
void print( );
};

int main( )
{
vec a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(6);
a.print( );
return 0;
}

void vec::push_back(int data)
{
if(this>vec1.size( )==this
>vec1.max_size( ))
this->vec2.push_back(data);
else
this->vec1.push_back(data);
}

void vec::print( )
{
for(int i=0;i<this->vec1.size( );i++)
cout«this->vec1.at(i)<<endl;
if(this->vec2.size( )!=0)
for(int j=0;j<this->vec2.size( );j++)
cout<<this->vec2.at(j)<<endl;
}

این هم برای ذخیره ی عناصر بیشتر از ظرفیت وکتور, اگر به تعداد بیشتری لازم دارید می توانید وکتورهای بیشتری داخل کلاس تعریف کنید و داخل انها هم داده ذخیره کنید
شعری هست که میگوید تا وکتور اول پر نشده است عناصر رو داخل وکتور اول ذخیره کن اگر اولی پر شد در دومی ذخیره کن اگر دومی پر شد در سومی ذخیره کن نشانه ی پر شدن وکتور هم این است که size( ) با max_size( ) برابر می شود

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

🔹تابع at

reference at (size_type n);
const_reference at (size_type n) const;

این متد در عمل کاملا مثل عملگر [ ] عمل می کند با این تفاوت که اگر آن اندیسی که ما به این متد می دهیم نا معتبر باشد (برابر یا مساوی با size( ) یا کمتر از 0 به قول سایت سی پلاس یک استثناء پرتاب می کند که می توانیم با ساختار try،{ }catch( ){ } آن را چک کنیم

🔹پارامتر ها:

🔻مفهوم n:
اندیسی برای موقعیت عنصری که می خواهیم به آن دسترسی پیدا کنیم

#include <iostream>

#include <vector>

using namespace std;


int main ( )

{

vector<int> myvector (10);

//10 zero-initialized ints//assign some values:

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

myvector.at(i)=i;

cout<<"myvectorcontains:";

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

cout<<' '<<myvector.at(i);

cout<<'\n';

return 0;

}


Output:
myvector contains: 0 1 2 3 4 5 6 7 8 9

مثال)

#include <iostream>

#include <vector>

#include <stdexcept>

using namespace std;


int main( )

{

vector<int> a;

for(int i=0;i<=10;i++)

a.push_back(i);

try

{

 cout<<a.at(-10)<<endl;

 }

catch(const out_of_range& o)

{

cout<<o.what( )<<endl;

 }

return 0;

}


Output:
Vector::_M_range_check

اگر اندیسی که می دهیم خارج از محدوده باشد اینگونه می شود ...

🔰ترجمه شده از سایت www.cplusplus.com
@learncpp