تکین وب | آموزش برنامه نویسی
تکین وب | آموزش برنامه نویسی

کلاس vector در ++C

۴ تیر ۱۳۹۵

یکی از کلاس های مفید کتابخانه STL  که می توان از آن به جای آرایه استفاده کرد و گاهی هم به جای لینک لیست از آن استفاده می کنند ، کلاس وکتور می باشد که با استفاده از توابع عضو این کلاس ، نوشتن برنامه ها آسانتر خواهد شد .

برای استفاده از این کلاس باید vector را به بالای برنامه ضمیمه کنید :


#include<vector>

حالا می خواهیم به تعریف یک وکتور بپردازیم . اول اینکه مثل آرایه عناصر یک وکتور هم باید از یک نوع باشند . مثلا همگی از نوع int یا از نوع String باشند . در این صورت با استفاده از تعریف زیر می توان یک وکتور را تغریف نمود :

vector <int>myVector(5,0);

با این دستور یک وکتور با ۵ عنصر و با مقدار اولیه ۰ خواهیم داشت . شاید بپرسید که اگر بخواهیم خودمان در لحظه ی تعریف مقدار اولیه انجام دهیم و یا از کاربر بخواهیم که هر بار با وارد کردن یک عنصر به وکتور خانه ها را مقداردهی کند ، باید چه کدی را بنویسیم ؟

برای این کار باید از یک آرایه ی کمکی استفاده کنیم . مثلا یک آرایه ای که ۵ عنصر دارد که هم می توان در لحظه ی تعریف این مقداردهی کرد و هم می توان با یک حلقه ی for از کاربر این مقادیر را دریافت کرد . سپس با استفاده از دو تابع begin و end در کلاس vector ، وکتوری با مقادیر دلخواه خواهیم داشت :

int myArray[5]= {1,2,3,4,5};
vector <int>myvector(begin(myArray),end(myArray));

و با استفاده از حلقه ی for :

int myArray[5] ;
	for (int i=0 ; i <5;i++)
		cin>>myArray[i];
	vector<int>myvector(begin(myArray),end(myArray));

البته روش های دیگری هم برای این کار وجود دارد .

حالا میخواهیم با استفاده از دو تابع مهم دیگر به آخر وکتور عنصری اضافه یا کم کنیم . البته با این کار سایز وکتور هم تغییر خواهد کرد .

برای اضافه کردن به آخر وکتور از تابع زیر استفاده می کنیم :

myvector.push_back(4);

اگر با تابع عضو size بخواهید تعداد خانه های این وکتور را بدانید ، یکی به خانه های وکتور اضافه شده است :

myvector.size();

و با استفاده از تابع زیر یک عنصر از آخر وکتور حذف می شود :

myvector.pop_back();

برای تعریف یک وکتور دو بعدی هم ابتدا یک وکتوری به نام vec که عناصر آن ، خودشان یک وکتورند و سطرهایش را میسازند ، تعریف می کنیم و سپس با استفاده از دو حلقه ی for تو در تو عناصر آن را خواهیم دید :

  vector<vector<int>> vec; // declare 2D vector
    for (int i=0;<=3; i++) 
	{
        vector<int> row;  // create a row vector which adds a row to vec
        for (int j=0; j<=4; j++) 
		{
            row.push_back(j*10); // push elements 0,10,20,30,40 to row 
        }
        vec.push_back(row); // add this row to vec
        // Repeat this procedure 4 times to make a 4*5 2D vector
    }

   for(int i=0 ; <=3 ; i++)
   {
	   for (int j = 0 ;<=4 ; j++)
	   {
		   cout<<vec[i][j]<<;;" ";
	   }
	   cout<<endl ;
   }

برای اضافه کردن یک یا چند عنصر بین دو عنصر در وکتور باید از تابع insert و از iterator برای پیمایش رو عناصر وکتور ، استفاده می شود .

vector<int> myvector (5,0);
	vector <in>::iterator it ;
	it = myvector.begin();
	it = myvector.insert(it , 200);
	myvector.insert(it , 2 ,300);
	it = myvector.begin();
	vector<int> anotherVector(2,400);
	myvector.insert(it+2 , anotherVector.begin(), anotherVector.end());

 

بعد از اینکه اولین وکتور با ۵ عنصر و مقدار اولیه ۰ را ساختیم ، به یک آبجکت نیاز داریم که کار اشاره گر را انجام دهد و روی عناصر وکتور حرکت کند . آبجکت it مانند یک اشاره گر است . که در مرحله ی بعدی به اولین عنصر وکتور اشاره می کند .

سپس از تابع insert  استفاده می کنیم و میگوییم که مقدار ۲۰۰ را به جایی که it به آن اشاره می کند ، اضافه کن .(یعنی به ابتدای وکتور) .

می توان تعداد بیشتری را اضافه کرد . مثلا ۲ عنصر ، که در خط  بعدی با مقدار ۳۰۰ به ابتدای وکتور اضافه شده است .

برای اینکه مقدار ۴۰۰ را بین دو عنصر ۲۰۰ و ۳۰۰ قرار گیرد از یک وکتور کمکی استفاده میکنیم . وکتوری به نام anotherVector با ۲ عنصر و با مقدار اولیه ۴۰۰ را تعریف می کنیم .

در خط بعدی می خواهیم بگوییم بعد از دومین جاییکه it به آن اشاره  می کرد ، وکتور جدید با مقدار۴۰۰ را قرار بده . پس it+2 به همین خاطر قید شده است .

چند تابع کاربردی کلاس vector :

تابع resize برای زمانی که ما به چند خانه ی وکتور نیاز نداریم و یا به چند خانه نیاز داریم ، استفاده می شود و به تبع اندازه ی وکتور تغییر خواهد کرد :

vector <int>myvector(5,0);
myvector.resize(10);
myvector.resize(3);

درواقع با مقدار ۱۰ ، ۵ عنصر به آخر وکتور اضافه می شود و با مقدار ۳  ، ۲ عنصر از وکتور حذف خواهد شد .

تابع بعدی تابع at برای دسترسی به عناصر وکتور می باشد که در اینجا به سومین عنصر وکتور دسترسی خواهیم داشت :

myvector.at(3);

برای نابود کردن یک وکتور هم از تابع clear استفاده می شود :

myvector.clear();

تابع ()max_size  بیشترین طول ممکن برای یک وکتور را با توجه به حافظه ی موجود بیان می کند :

myvector.max_size();

تابع swap برای جابجایی عناصر دو وکتور استفاده می شود . در مثال زیر با چاپ عناصر این دو وکتور قبل و بعد از دستور swap متوجه تغییرات و جابجایی عناصر آنها خواهید شد :

 

vector<int> myvector(5 , 0);
vector <int> showSwap(3 , 5);
 myvector.swap(showSwap);

 

در ضمن اگر اینستاگرامی هستید حتما @Takinweb را فالو کنید…

درباره ی عطیه رحمانی

دیدگاه ها

دیدگاه خود را به ما بگویید.

کلیه ی حقوق مادی و معنوی مطالب متعلق به سایت تکین وب می باشد و کپی برداری و بازنشر آن بدون ذکر منبع کاری غیر حرفه ای و غیر اخلاقی و قابل پیگرد قانونی خواهد بود.
کانال تلگرام تکین وب