บทนำ
ได้รับอาร์เรย์มา ภารกิจคือหาจำนวนองค์ประกอบที่หารด้วย N ลงตัวโดยใช้ Standard Template Library (STL) ใน C++
เราใช้ฟังก์ชัน count_if() ใน C++ STL
Syntax
count_if(LowerBound, UpperBound, function)
คำอธิบาย - ฟังก์ชันนี้คืนค่าจำนวนองค์ประกอบที่ตรงตามเงื่อนไข รับ 3 พารามิเตอร์:
- Lower Bound - ชี้ไปองค์ประกอบแรก
- Upper Bound - ชี้ไปองค์ประกอบสุดท้าย
- Function - คืนค่า Boolean ตามเงื่อนไข
ตัวอย่าง
Input: array[] = {2, 4, 1, 5, 8, 9}, N = 4
Output: Elements divisible by 4: 2 (คือ 4 และ 8)
Input: array[] = {1, 2, 3, 4, 5, 10}, N = 2
Output: Elements divisible by 2: 3 (คือ 2, 4, 10)
แนวทางในโปรแกรม -
- รับค่าจำนวนเต็มในอาร์เรย์
- สร้างฟังก์ชัน bool ตรวจสอบว่าหารด้วย N ลงตัวหรือไม่
- เรียก count_if() พร้อมพารามิเตอร์ ตัวแรก ตัวสุดท้าย และฟังก์ชันตรวจสอบ
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int n;
// ฟังก์ชันตรวจสอบหารลงตัว
bool check(int i) {
if (i % n == 0)
return true;
else
return false;
}
int main() {
int arr[] = {2, 4, 1, 5, 8, 9};
n = 4;
int size = sizeof(arr) / sizeof(arr[0]);
int temp = count_if(arr, arr + size, check);
cout << "Elements divisible by " << n << ": " << temp;
return 0;
}
ผลลัพธ์
Elements divisible by 4: 2
คำอธิบายเพิ่มเติม
ตัวแปร n ประกาศเป็น global เพื่อให้ฟังก์ชัน check() เข้าถึงได้ (เพราะ count_if ไม่รองรับการส่งพารามิเตอร์เพิ่มเติมให้ predicate โดยตรง ใน C++11 ขึ้นไปแนะนำให้ใช้ Lambda Function แทน)