الگوریتم ها (Algorithms)
اینجا درباره «الگوریتم ها (Algorithms)» حرف می زنیم. الگوریتم یعنی روش حل. مثل وقتی دفترت را بر اساس نمره مرتب می کنی. در ++C، کتابخانه <algorithm> همین کارها را می کند. همچنین با «ایتریتور (Iterator)» کار می کند؛ ایتریتور یعنی اشاره گرِ حرکت بین عناصر.
مرتب سازی با sort
برای مرتب سازی، از تابع sort() استفاده کن. این تابع دو ایتریتور می گیرد: از begin() تا end(). مثل صف کردن دفترها روی میز.
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
sort(cars.begin(), cars.end());
برای اعداد هم همین است. این بار مرتب سازی عددی انجام می شود.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
sort(numbers.begin(), numbers.end());
اگر برعکس می خواهی، از rbegin() و rend() استفاده کن.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
sort(numbers.rbegin(), numbers.rend());
می توانی بخشی از بردار را هم مرتب کنی؛ از عنصر چهارم به بعد.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
sort(numbers.begin() + 3, numbers.end());
جستجو با find و دوستان
برای پیدا کردن یک مقدار، find() را صدا بزن. سه ورودی می گیرد: شروع، پایان، مقدار.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
auto it = find(numbers.begin(), numbers.end(), 3);
برای اولین مقدار «بزرگ تر از» عددی مشخص، از upper_bound() استفاده کن. این تابع معمولاً روی داده مرتب کار می کند.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
sort(numbers.begin(), numbers.end());
auto it = upper_bound(numbers.begin(), numbers.end(), 5);
کمترین عنصر را با min_element() و بیشترین را با max_element() بگیر.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
auto mn = min_element(numbers.begin(), numbers.end());
vector<int> numbers = {1, 7, 3, 5, 9, 2};
auto mx = max_element(numbers.begin(), numbers.end());
تغییر دادن با copy و fill
برای کپی همه عناصر، از copy() کمک بگیر. مقصد باید جا داشته باشد.
vector<int> numbers = {1, 7, 3, 5, 9, 2};
vector<int> copiedNumbers(6);
copy(numbers.begin(), numbers.end(), copiedNumbers.begin());
برای پر کردن همه خانه ها با یک مقدار، از fill() استفاده کن.
vector<int> numbers(6);
fill(numbers.begin(), numbers.end(), 35);
گام های تمرین سریع
- یک بردار بساز و چند عدد وارد کن.
- با
sort()آن را مرتب کن. - با
find()عدد 3 را پیدا کن. - با
fill()همه را 10 کن.
نکته: برای کار با این توابع، ایتریتورها لازم اند. صفحه ایتریتورها (Iterators) را ببین.
برای یادگیری ساختارهای داده، صفحه نقشه ها (Maps) هم مفید است. همچنین لینک الگوریتم های سی پلاس پلاس را نگه دار.
جمع بندی سریع
sort()برای مرتب سازی است.find()یک مقدار را می یابد.upper_bound()در داده مرتب جواب می دهد.copy()جابه جا می کند؛ مقصد باید جا داشته باشد.fill()همه خانه ها را یکسان می کند.