การสร้างข้อมูลทดสอบ (test cases) สำหรับอาเรย์มักซับซ้อน C++ STL มีฟังก์ชัน generate() และ generate_n() ใน <algorithm> ช่วยสร้างค่าได้ง่ายและมีประสิทธิภาพ
1. generate(first, last, gen)
กำหนดค่าให้ elements ใน range [first, last) โดยเรียก gen() ซ้ำๆ
#include <bits/stdc++.h>
using namespace std;
int create_random() {
return (rand() % 1000);
}
int main() {
srand(time(NULL));
vector<int> data(15);
generate(data.begin(), data.end(), create_random);
for (int i = 0; i < data.size(); i++)
cout << data[i] << " ";
}
เอาต์พุทตัวอย่าง
449 180 785 629 547 912 581 520 534 778 670 302 345 965 107
2. generate_n(first, n, gen)
กำหนดค่าให้ n elements ตั้งแต่ first โดยเรียก gen() ซ้ำ n ครั้ง
#include <bits/stdc++.h>
using namespace std;
int create_random() {
return (rand() % 1000);
}
int main() {
srand(time(NULL));
vector<int> data(15);
generate_n(data.begin(), 6, create_random); // เติมแค่ 6 ตัวแรก
for (int i = 0; i < data.size(); i++)
cout << data[i] << " ";
}
เอาต์พุทตัวอย่าง
540 744 814 771 254 913 0 0 0 0 0 0 0 0 0
การประยุกต์เพิ่มเติม
- ใช้ lambda แทน function pointer:
generate(v.begin(), v.end(), [](){ return rand()%100; }); - สร้าง sequence:
int i=0; generate(v.begin(), v.end(), [&i](){ return i++; }); - ร่วมกับ
iotaสำหรับลำดับเลข:iota(v.begin(), v.end(), 1);
สรุป
generate() เติมทั้ง range, generate_n() เติมแค่ n ตัว ทั้งคู่ยืดหยุ่น รองรับ generator ใดก็ได้ (function, lambda, functor) เหมาะสำหรับสร้าง test data อย่างรวดเร็ว