ฉันก็สายเกินไป แต่คุณสามารถใช้สิ่งนี้ได้ (ฟังก์ชันตัวแปรสไตล์ C):
template<typename T>
void foreach(std::function<void(T)> callback, int count, ...) {
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
std::vector<T> v = va_arg(args, std::vector<T>);
std::for_each(v.begin(), v.end(), callback);
}
va_end(args);
}
foreach<int>([](const int &i) {
// do something here
}, 6, vecA, vecB, vecC, vecD, vecE, vecF);
หรือสิ่งนี้ (โดยใช้ชุดพารามิเตอร์ฟังก์ชัน):
template<typename Func, typename T>
void foreach(Func callback, std::vector<T> &v) {
std::for_each(v.begin(), v.end(), callback);
}
template<typename Func, typename T, typename... Args>
void foreach(Func callback, std::vector<T> &v, Args... args) {
std::for_each(v.begin(), v.end(), callback);
return foreach(callback, args...);
}
foreach([](const int &i){
// do something here
}, vecA, vecB, vecC, vecD, vecE, vecF);
หรือสิ่งนี้ (โดยใช้รายการเริ่มต้นที่มีวงเล็บปีกกา):
template<typename Func, typename T>
void foreach(Func callback, std::initializer_list<std::vector<T>> list) {
for (auto &vec : list) {
std::for_each(vec.begin(), vec.end(), callback);
}
}
foreach([](const int &i){
// do something here
}, {vecA, vecB, vecC, vecD, vecE, vecF});
หรือคุณสามารถรวมเวกเตอร์ได้ดังนี้อะไรคือวิธีที่ดีที่สุดในการต่อเวกเตอร์สองตัว แล้วทำซ้ำบนเวกเตอร์ขนาดใหญ่
transform
ของขวัญในปัจจุบัน#include <algorithm>
ล่ะ?