Telegram Web Link
#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
#vector #operator
🔵وکتور(vector)

🔹تابع Operator[ ]
reference operator[ ] (size_type n);
const_reference operator[ ] (size_type n) const;

عملگر [ ] مثل اندیس داخل آرایه ها عمل می کند و همین عملگر باعث شباهت وکتور و آرایه هاست. ما به دو روش می توانیم از اندیس برای دسترسی به عناصر وکتور استفاده کنیم اولی که همان روش معمولی آرایه هاست :
Vec[4]
و روش دیگر هم استفاده از متد operator[ ]( ) است :
Vec.operator[ ](4)
این دو روش هیچ تفاوتی ندارند.
عملکرد این عملگر با متد at کاملا مشابه است ولی اگر ما یک مقداری که در محدوده ی وکتور نیست (مثلا منفی است، سه یا یک مقداری بیشتر از تعداد عناصر داخل وکتور ) به متد at بدهیم این متد یک خطای out_of_range را ست می کند ولی عملگر [ ] مقدار 0 را به ما می دهد.

🔹پارامتر ها:

🔻مفهوم N:
موقعیت یا اندیس عنصر داخل وکتور که البته از 0 شروع می شود نه از 1

#include <iostream>

#include <vector>

using namespace std;


int main( )

{

vector<int>a;

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

a.push_back(i);

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

cout<<a[j]<<"\t";

cout<<endl;

a[2]=34;

cout<<a[2]<<endl;

return 0;

}


Output:
0 1 2 3 4 5 6 7 8 9 10
34
همان طور که می بینید با این عملگر می توانیم هم مقداری را بخوانیم هم مقداری را تغییر بدهیم، کاملا شبیه آرایه ها.

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

🔹تابع Empty
bool empty( ) const noexcept
به طور کاملا ساده ای چک می کند که آیا وکتور ما خالی است یا نه، خالی بودن به این معنی است که size( ) مقدارش 0 باشد.

🔹مقادیر بازگشتی :
اگر true باشد وکتور ما خالی است در غیر اینصورت اگر false باشد یعنی حداقل یک عنصر داخل وکتور وجود دارد
مثال)

#include <iostream>
#include <vector>
using namespace std;

int main ( )
{
vector<int> myvector;
int sum (0);
for (int i=1;i<=10;i++) myvector.push_back(i);
while(!myvector.empty( ))
{
sum += myvector.back( );
myvector.pop_back( );
}
cout<<"total: "<<sum<<'\n';
return 0;
}

Output :
Total: 55

این برنامه یک وکتور را با یک دنباله از اعداد 1 تا 10 پر می کند بعد تا زمانی که خالی نشده یکی از آخر حذف می کند و یه متغیر را ++ می کند. وقتی که وکتور خالی شد از حلقه بیرون می آید و مقدار آن متغیر که حالا برابر با تعداد عناصر داخل وکتور است را چاپ میکند.

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

🔹مفهومiterator:
شاید برای شما سوال پیش آمده باشد که چگونه می شود یک اشاره گر را طوری تعریف کرد که بتواند به جای خاص از یک وکتور اشاره کند اگر ما یک وکتور را به روش معمولی به صورت اشاره گر تعریف کنیم آن اشاره گر فقط می تواند به ابتدای وکتور اشاره کند ولی اگر به روش زیر عمل کنید می توانید به ابتدا و انتهای یک وکتور اشاره کنید :

Vector<int>::iterator a;
حال a به صورت یک اشاره گر از نوع وکتور تعریف شده حال چگونه باید به انتهای وکتور اشاره کند؟ یک متد داخل وکتور هست که می تواند این کار را انجام دهد

a.end( );
حالا a به انتهای وکتور اشاره می کند.

a.begin( );
حالا a به ابتدای وکتور اشاره می کند.

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

@Learncpp
#vector #Begin
🔵وکتور(vector)

🔹تابع Begin
iterator begin( ) noexcept;
const_iterator begin( ) const noexcept;

و اما begin ... این یک اشاره گر بر می گرداند که به اولین عنصر وکتور اشاره میکند البته می دانید که منظورم از اشاره گر همان iterator است . begin و end مثل هم عمل می کنند با این تفاوت که begin به اول وکتور اشاره می کند و end به آخر وکتور البته همیشه آخرینه آخرین عنصری که برای ما هم بدون iterator ها قابل دسترسی نیست مقدار 0 یا همان NULL است که end به همین اشاره می کند بروید end را بخوانید

🔹مقادیر بازگشتی :
اگر داده ای داخل وکتور وجود داشته باشد یک اشاره گر به اولین داده داخل وکتور برمی گرداند اگر داده ای هم نباشد begin به چیزی اشاره نمیکند پس begin چیزی را برنمی گرداند.

#include <iostream>
#include <vector>
using namespace std;

void main( )
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
cout<<*vec.begin( )<<endl;
vector<int>::iterator s=vec.begin( );
cout<<*s<<endl;
}


Output :
1
1

در این مثال می بینید که با iterator ها می شود مثل اشاره گر ها رفتار کرد یعنی با عملگر * می توانیم مقدار آنها را بخوانیم در این مثال دو نوع استفاده از iterator ها گفته شده است یک بار اولین عنصر وکتور را مستقیم با عملگر * می خوانیم و چاپ می کنیم یک بار هم iterator ی که به اولین عنصر اشاره می کند را می ریزیم در یک iterator دیگر بعد با * چاپش می کنیم

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

@Learncpp
#vector #cbegin
🔵وکتور(vector)

🔹تابع cbegin
const_iterator cbegin( ) const noexcept;


یک const_iterator به اولین عنصر وکتور بر می گرداند، تفاوتش با begin این است که شما با begin می توانید مقدار اولین عنصر وکتور را عوض کنید مثل این :

*Vec.begin( ) = 12;

ولی با cbegin نمی توانید این کار را کنید و برای زمانهایی خوب است که شما می خواهید فقط به اولین عنصر وکتور دسترسی داشته باشید و مطمئن هم باشید که هیچ موقع مقدار تغییر نمی کند چون اگر از begin استفاده کنید ممکن است جایی از برنامه به طور کاملا ناخواسته و اشتباها مقدارش عوض شود.

🔹مقادیر بازگشتی :
یک const_iterator به اولین عنصر وکتور اشاره می کند و اگر وکتور خالی باشد به چیزی اشاره نمی کند.

#include <iostream>
#include <vector>
using namespace std;

int main ( )
{
vector<int> myvector={10,20,30,40,50};
cout<< myvector contains:";
for(auto it=myvector.cbegin( );it != myvector.cend( );++it)
cout<< ' '<<*it;
cout<< '\n';
return 0;
}

Output:
myvector contains: 10 20 30 40 50

همانطور که می بینید با cbegin می توانیم مطمئن باشیم که به اولین عنصر به طور فقط_خواندنی دسترسی داریم.

🔰ترجمه شده ازسایت
www.cplucpluc.com

@Learncpp
#vector #Rbegin
🔵وکتور(vector)

🔹تابع Rbegin
reverse_iterator rbegin( ) noexcept;
const_reverse_iterator rbegin( ) const noexcept;

تابع rbegin می تواند جایگزین مناسبی برای end باشد. rbegin همه چیز را داخل وکتور برعکس می بیند حتی ترتیب عناصر، پس با این حساب اولین عنصر را هم آخرین عنصر می بیند پس یک اشاره گر به آخرین عنصر وکتور برمی گرداند. دقت کنیم که یک اشاره گر به آخرین عنصر بر می گرداند نه به آخرینه آخرین عنصر پس می توانیم جای تابع end از آن استفاده کنیم و دیگر مجبور نباشیم آخرین عنصر را با * یا end بخوانیم.

🔹مقادیر بازگشتی :
یک reverse_iterator به آخرین عنصر وکتور بر می‌گرداند

#include <iostream>
#include <vector>
using namespace std;

int main( )
{
vector<int> c;
c.push_back(1);
c.push_back(2);
c.push_back(3);
cout<<*c.rbegin( )<<endl;
return 0;
}

Output :
3

برعکس اسمی که دارد عمل می کند.

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

@Learncpp
#vector #crbegin
🔵وکتور(vector)

🔹تابع Crbegin
const_reverse_iterator crbegin( ) const noexcept;
این تابع یک const_reverse_iterator را بر می گرداند در واقع این متد کل وکتور را برعکس می بیند و بجای اینکه یک iterator به اولین عنصر برگرداند یک iterator به آخرین عنصر بر می گرداند البته این iterator به ما دسترسی فقط_خواندنی می دهد و نمی توانیم مقدار عنصر را عوض کنیم.

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

#include <iostream>
#include <vector>
using namespace std;

int main ( )
{
vector<int> myvector={1,2,3,4,5};
cout<<"myvector backwards:";
for(auto rit=myvector.crbegin( );rit != myvector.crend( );++rit)
cout<<' '<<*rit;
cout<< '\n';
return 0;
}


Output:
myvector backwards: 5 4 3 2 1

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

@Learncpp
#vector #End
🔵وکتور(vector)

🔹تابع End

iterator end( )noexcept;
const_iterator end( )const noexcept;

این هم یک iterato بر می گرداند که به آخرینه آخرین عنصر داخل وکتور اشاره می کند یا به قول خود سایت سی پلاس past-the-end element، البته اگر بخواهید مقدار این اشاره گر را با * بگیرید باید گفت چیزی بیشتر از یک 0 نصیبتان نمی شود فرض کنید مقادیر 0 و1 و2 و 3 را داخل وکتور push_back کردیم به نظر شما، حال وکتور ما چه وضعیتی دارد؟

0 1 2 3 0

این 0 آخر از کجا آمد؟؟؟ این در واقع همان NULL ی است که انتهای وکتور را مشخص می کند مثل زمانی که می خواستیم آخر لینک لیست را با NULL مشخص کنیم.

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main( )
{
vector<int> c;
c.push_back(1);
c.push_back(2);
c.push_back(3);
cout<<*c.end( )<<”\t”;
cout<<*--c.end( )<<endl;
return 0;
}


Output :
0 3

همان طور که در مثال می بینید با اولین cout فقط یک 0 چاپ شده چون ما داریم به آن می گوییم که آخرینه آخرین عنصر وکتور را چاپ کند ولی با cout دوم مقدار 3 چاپ می شود چون ما به آن گفتیم آخرین عنصر وکتور را چاپ کن.

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

@Learncpp
#vector #cend
🔵وکتور(vector)

🔹تابع cend
const_iterator cend( ) const noexcept;

به آخرینconst_iterator یک cend عنصر وکتور بر می گرداند. شما با این تابع می توانید مطمئن باشید که به آخرینه آخرین عنصر دسترسی فقط_خواندنی دارید وطبق هیچ شرایطی نمی توانید مقدارش راعوض کنید.

🔹مقادیر بازگشتی :
یک const_iterator به آخرینه آخرین عنصر وکتور

#include <iostream>
#include <vector>
using namespace std;

int main ( )
{
vector<int> myvector={10,20,30,40,50};
cout<<"myvector contains:";
for(auto it=myvector.cbegin( );it != myvector.cend( );++it)
cout<< ' '<<*it;
cout<<'\n';
return 0;
}

Output:
myvector contains: 10 20 30 40 50

🔰ترجمه شده ازسایت
www.cpluspluc.com

@Learncpp
#vector #Rend
🔵وکتور(vector)

🔹تابع Rend
reverse_iterator rend( ) noexcept;

const_reverse_iterator rend( ) const noexcept;


تابع rend یک iterator به اولینه اولین عنصر داخل وکتور برمی گرداند. وقتی که end به آخرینه آخرین عنصر وکتور که یک 0 هست اشاره می کند پس rend هم به اولینه اولین عنصر که مقدارش یک مقدار فرضی داخل حافظه است و اصلا ربطی به برنامه ی ما ندارد اشاره می کند که اگر می خواهید به اولین عنصر با این متد دسترسی داشته باشید باید آن اشاره گر را یک بار – کنید.

🔹مقادیر بازگشتی :
یک reverse_iterator به اولینه اولین عنصر وکتور که یک مقدار بی ربط چاپ می کند.
#include <iostream>

#include <vector>

using namespace std;


int main( )

{

vector<int> c;

c.push_back(1);

c.push_back(2);

c.push_back(3);

cout<<*c.rend( )<<endl;

cout<<*--c.rend( )<<endl;

return 0;

}


Output :
436700230
1
نیازی به توضیح ندارد، فقط آن مقدار بی ربطی که چاپ می شود ممکن است در کامپیوتر شما متفاوت باشد.

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

@Learncpp
#vector #Back
🔵وکتور(vector)

🔹تابع Back
reference back( );
const_reference back( ) const;


این متد مقدار آخرین عنصر وکتور را به ما می دهد تفاوتش با تابع end( ) این است که end( ) یک iterator به آخرین عنصر به ما می دهد ولی back( ) خود عنصر را به مامی دهد.

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

int main ( )
{
vector<int> myvector;
myvector.push_back(10);
while(myvector.back( ) != 0)
{
myvector.push_back
(myvector.back( ) -1 );
}
cout<<"myvector contains:";
contains:";
for(unsigned i=0;i<myvector.size( ) ;i++)
cout<<' '<<myvector[i];
cout<<'\n';
return 0;
}


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

این برنامه هم با یک الگوریتم خیلی ساده مقادیر 10 تا 0 در یک وکتور می ریزد بعد هم آنها راچاپ میکند. اگر برنامه را ذهنی تریسم کنید به همین خروجی می رسید.

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

@Learncpp
#vector #Emplace
🔵وکتور(vector)

🔹تابع Emplace
template <class... Args>

iterator emplace (const_iterator position, Args&&... args);


یک داده ی جدید را به موقعیت position می برد. فرض کنید می خواهیم یک عنصر را به موقعیت 3 ببریم با این تابع این کار را می کنیم ولی عنصر قبل از موقعیت 3 از بین نمی رود بلکه به موقعیت 4 منتقل می شود و 4 به 5 و 5 به 6 تا آخر.

🔹پارامترها :

🔻مفهوم Position :
یک اشاره گر به موقعیتی که می خواهیم داده را اضافه کنیم

🔻مفهومArgs :
داده ای که قرار است اضافه شود

#include <iostream>

#include <vector>

using namespace std;


int main ( )

{

vector<int> a(3,100);

a.emplace(a.begin( )+1,12);

a.emplace(a.end( ),11);

for(auto& x: a)

cout<<x<<endl;

return 0;

}


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

@Learncpp
#vector #Emplace_back
🔵وکتور(vector)

🔹تابع Emplace_back
template <class... Args>

void emplace_back (Args&&... args);


یک داده را به آخر وکتور اضافه می کند.

🔹پارامتر ها :

🔻مفهوم Args :
داده ای باید به آخر وکتور اضافه شود

#include <iostream>

#include <vector>

using namespace std;


int main ( )

{

vector<int> myvector={10,20,30};

myvector.emplace_back(100);

myvector.emplace_back(200);

cout<<"myvector contains:";

for(auto& x: myvector)

cout<<' '<<x;

cout<<'\n';

return 0;

}


Output:
myvector contains: 10 20 30 100 200

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

@Learncpp
#vector #operator
🔵وکتور(vector)

🔹تابع = operator
🔹copy (1)

vector& operator= (const vector& x);


🔹move (2)

vector& operator=(vector&& x);


🔹initializer list (3)

vector& operator=(initializer_list<value_type> il);


چرا سی پلاس باید عملگر + رو برای وکتور آورلود کند؟ دلیل آن این است که ما وقتی می خواهیم از عملگر + برای انتصاب وکتور ها استفاده کنیم باید چیزی بیشتر از یک متغیر کپی شود در واقع ما می خواهیم یک کلاس را در یک کلاس دیگر کپی کنیم ولی نه هر گونه کپی کردنی باید آن کپی طوری باشد که می خواهیم

🔹عملگر + سه آورلود دارد

🔻1)مفهوم Copy :
این متد کل محتویات یک وکتور را کپی می کند در یک وکتور دیگر یعنی در واقع کل محتویات وکتور x را کپی می کند در یک وکتور جدید

🔻2)مفهوم Move :
این متد کل محتویات یک وکتور را منتقل می کند به یک وکتور دیگر

🔻3)مفهوم Initializer list :
این هم یک نوع داده ای که مشخص نیست را می ریزد در یک وکتور

🔹پارامتر ها :

🔻مفهوم X :
همان وکتوری که قرار است کپی یا منتقل شود

🔻مفهوم Li :
این هم همان لیستی است که نوع آن مشخص نیست
#include <iostream>

#include <vector>

using namespace std;


int main ( )

{

vector<int> foo(3,0);

vector<int> bar(5,0);


bar=foo;

foo=vector<int>();


cout<<"Size of foo: "<<int(foo.size( ))<<'\n';

cout<<"Size of bar"<<int(bar.size( )) <<'\n';

return 0;

}


Output:
Size of foo: 0
Size of bar: 3

متد size( ) تعداد عناصر داخل وکتور را بر می گرداند

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

@Learncpp
2025/07/01 07:22:06
Back to Top
HTML Embed Code: