بخش ۲ - مقدمهای بر بردارها
در این بخش استفادهی ابتدایی از تایپ بردار (vector) پوشش داده میشود. این تایپ جزئی از کتابخانهی استاندارد سیپلاسپلاس است که کار با دنبالهای از عناصر را بدون دغدغههای مدیریت حافظه مهیا میکند.
فهرست مثالها
محاسبهی میانگین و میانه
در این برنامه تعدادی عدد اعشاری (که نمایندهی دما هستند) از ورودی گرفته میشود و میانگین و میانهی آنها در خروجی نوشته میشود. تعداد این اعداد در زمان نوشتن برنامه نامعلوم است.
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<double> temps; double temp; while (cin >> temp) temps.push_back(temp); double sum = 0; for (int i = 0; i < temps.size(); ++i) sum += temps[i]; cout << "Mean temperature: " << sum/temps.size() << endl; sort(temps.begin(), temps.end()); cout << "Median temperature: " << temps[temps.size()/2]; }
مقداردهی اولیهی بردارها
این مثال نشاندهندهی مقداردهی اولیهی اندازه و عناصر بردار است.
#include <vector> #include <string> #include <iostream> using namespace std; int main() { vector<double> vec; // vec[0] = 10; vec.push_back(1.3); vec[0] = 12.4; vector<int> v(6); v[0] = 5; v[1] = 7; v[2] = 9; v[3] = 4; v[4] = 6; v[5] = 8; vector<string> philosopher(4); philosopher [0] = "Kant"; philosopher [1] = "Plato"; philosopher [2] = "Hume"; philosopher [3] = "Kierkegaard"; //philosopher[2] = 99; vector<double> vd(1000, 1.2); //vd[1000] = 4.7; }
تمرینهای کوتاه
- برداری از کاراکترها تعریف کنید که در ابتدا به اندازهی ۱۰۰ کاراکتر جا داشته باشد که همهی آنها با کاراکتر A مقداردهی اولیه شدهاند.
- در صورتی که بخواهیم برداری ۲۶تایی از کاراکترها داشته باشیم که با کاراکترهای A تا Z مقداردهی شده باشند چگونه آن را تعریف میکنیم؟ آیا میتوان اینگونه مقداردهی اولیه را یکجا انجام داد؟
- تابعی به نام most_frequent بنویسید که یک بردار از اعداد صحیح را بگیرد و عددی را برگرداند که بیشترین تعداد تکرار را داشته است. اگر بیشترین تعداد تکرار متعلق به چند عدد بود یکی را به دلخواه برگرداند.
- تابع بالا را طوری تغییر دهید که اگر بیشترین تعداد تکرار متعلق به چند عدد باشد تمام این اعداد را برگرداند. (به این ترتیب، تایپ بازگشتی این تابع از نوع vector خواهد بود.)
- اگر در دو سؤال بالا فرض بر این باشد که بردار مذکور حاوی تعداد بسیار زیادی عدد در بازهی ۰ تا ۹۹ است، چگونه میتوان از این فرض استفاده کرد و اجرای این دو تابع را سریعتر کرد؟
- چگونه میتوان یک آرایهی دوبعدی را با vector شبیهسازی کرد؟ با این روش یک آرایه با ۲ سطر و ۳ ستون تعریف کنید که همهی عناصر آن با ۱۳ مقداردهی اولیه شدهاند.
- با روش تمرین بالا، میتوان دادهها را به صورت دو بعدی نگهداشت طوری که لزوماً ساختار آنها مستطیل شکل نباشد! قطعه کدی بنویسید که ساختاری مانند شکل زیر را ایجاد کند.