-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSplit con Functor a Función.cpp
122 lines (101 loc) · 2.31 KB
/
Split con Functor a Función.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
using namespace std;
//Par
template <class T>
struct Par{
bool operator()(T x){
return (x%2==0);
}
};
// Multiplo de 3
template <class T>
struct multiploTres{
bool operator()(T a){
return (a%3==0);
}
};
// Multiplo de 4
template <class T>
struct multiploCinco{
bool operator()(T a){
return (a%5==0);
}
};
// Swap
template <class T>
void swap(T *a,T *b){
T r=*a;
*a = *b;
*b = r;
}
// Imprimir
void Imprimir(int tam,int *arr) {
cout<<"{";
for(int *i=arr; i<arr+tam; i++ ){
if(i<((arr+tam)-1)){
cout<<*i<<",";
}
else{
cout<<*i;
}
}
cout<<"}";cout<<endl;cout<<endl;
}
// Split
template <class T>
void split(int *arr, int tam ,int *&q, T comp){
for(int *p=arr; p < arr+tam; p++){
if(!q){ //verificamos que q no apunta a nada
if (comp(*p)){
q=p; // Si P es cumple se almacena dentro de Q
}
}
else{
if(!comp(*p)){// Si no es par
// R se ubica con Q
int *r=q;
while(r<p){
swap(r,p);//intercambio
r++;
}
q++;
}
}
}
}
// Main
int main() {
int arr[10], arr1[10], arr2[10];
int tam =10;
//Se llena el array
for(int *p=arr,i=1; p<arr+tam; p++, i++){
*p=i;
}
//Imprimir
cout<<"Array Base: ";
Imprimir(tam, arr);
//Pares
Par<int>p;
int *pares=nullptr;
split(arr,tam,pares,p);
cout<<"Array Pares: ";
Imprimir(tam, arr);
//Multiplos de 3
// Se llena el array
for(int *p=arr1,i=1; p<arr1+tam; p++, i++){
*p=i;}
multiploTres<int>Tres;
int *multi3=nullptr;
split(arr1,tam,multi3,Tres);
cout<<"Array Multiplos de 3: ";
Imprimir(tam, arr1);
//Multiplos de 5
// Se llena el array
for(int *p=arr2,i=1; p<arr2+tam; p++, i++){
*p=i;}
multiploCinco<int>Cinco;
int *multi5=nullptr;
split(arr2,tam,multi5,Cinco);
cout<<"Array Multiplos de 5: ";
Imprimir(tam, arr2);
}