Curso 2023/2024
void mezclar(const vector<float> & v1, const vector<float> & v2, vector<float> & v3, int pos1, int pos2, int pos3) { if (pos1 == v1.size() && pos2 == v2.size()) return; if (pos1 == v1.size()) v3[pos3++] = v2[pos2++]; else if (pos2 == v2.size()) v3[pos3++] = v1[pos1++]; else if (v1[pos1] < v2[pos2]) v3[pos3++] = v1[pos1++]; else if (v1[pos1] > v2[pos2]) v3[pos3++] = v2[pos2++]; else { v3[pos3++] = v1[pos1++]; v3[pos3++] = v2[pos2++]; } mezclar(v1, v2, v3, pos1, pos2, pos3); } vector<float> mezclar(const vector<float> & v1, const vector<float> & v2) { vector<float> v3(v1.size() + v2.size()); mezclar(v1, v2, v3, 0, 0, 0); return v3; }
void mezclar(const vector<float> & v1, const vector<float> & v2, vector<float> & v3, int pos1, int pos2, int pos3) { if (pos1 == v1.size() && pos2 == v2.size()) return; if (pos1 == v1.size() || (pos2 < v2.size() && v1[pos1] > v2[pos2])) v3[pos3++] = v2[pos2++]; else v3[pos3++] = v1[pos1++]; mezclar(v1, v2, v3, pos1, pos2, pos3); } vector<float> mezclar(const vector<float> & v1, const vector<float> & v2) { vector<float> v3(v1.size() + v2.size()); mezclar(v1, v2, v3, 0, 0, 0); return v3; }
La siguiente variante no sería una buena solución, porque
pagaría el coste temporal de copiar el vector cada vez que lo devuelve
con return
:
vector<float> mezclar(const vector<float> & v1, const vector<float> & v2, vector<float> & v3, int pos1, int pos2, int pos3) { if (pos1 == v1.size() && pos2 == v2.size()) return v3; if (pos1 == v1.size() || (pos2 < v2.size() && v1[pos1] > v2[pos2])) v3[pos3++] = v2[pos2++]; else v3[pos3++] = v1[pos1++]; return mezclar(v1, v2, v3, pos1, pos2, pos3); } vector<float> mezclar(const vector<float> & v1, const vector<float> & v2) { vector<float> v3(v1.size() + v2.size()); return mezclar(v1, v2, v3, 0, 0, 0); }