Estoy aprendiendo c++ y no consigo hacer la intersección de dos vectores que ya tengo. Alguien me puede echar una mano?
Ty
void interseccionNoOrdenado(int vector1[], int medida1, int vector2[], int medida2, int vectorResult[], int& medidaResult)
{
//inicializamos vectorResult
for(int i = 0; i <= medida1; i++){
vectorResult[i] = vector1[i];
}
midaResult = medida1;
//ordenamos vector2
int tmp;
for(int i = 0; i <= (medida2-1); i++){
for(int j = 0; j <= medida2-i-1; j++){
if(vector2[j] >= vector2[j+1]){
tmp = vector2[j];
vector2[j] = vector2[j+1];
vector2[j+1] = tmp;
}
}
}
//buscamos valores comunes de vector2 y vectorResultat
for(int i = 0; i <= medida1; i++){
if(!buscaElemento(vector2, medida2, vectorResult[i])){ //función devuelve si un num está en un vector
eliminaElemento(vectorResult, medidaResult, i);//elimina elemento y lo desplaza todo derecha
medidaResult--;
i--;
}
}
Para que vas a usar el programa?
Hay otros formas de recorrer un vector y buscar elementos en él.
int i = 0;
for (auto iter = MiVector.begin(); iter != MiVector.end(); ++iter)
{
i++
if (*iter == 2)
{
cout << "Encontrado el numero 2 en la posición [" <<i-1 << "] del vector." <<endl;
}
}
for (auto& numero : MiVector)
{
if (numero == 2)
{
cout.... numero;
}
}
for (MiVector::iterator encontrado = find(miVector.begin(), miVector.end(), 2)
if (encontrado != miVector.end())
{
cout... *encontrado;
}
No teniendo para que tanta complicación de código.
Recorres uno de los vectores y compruebas si los elementos estan el otro.
int i = 0;
for (iter vector1; iter != 10000; ++iter)
{
if (*iter == vector2
)
{
//encontrado elemento comun
}
if (iter == vector1.end())
{
iter = vector1.begin();
}
if (i==vector2.size())
{
iter = 10.000
}
else
{
i++
}
}
Es un ejemplo pseudocodigo que me acabo de inventar.
Recorres un vector como quieras.
Compruebas si todos sus elementos coinciden con los del indice - del otro vector.
Cuando llegues al final del vector lo reinicias para que vuelva a comparar, y le sumas + 1 al indice del otro vector. Repites esto hasta que se compruebe el útlimo elemento del último vector.
El ejemplo es meramente ilustrativo para que te hagas una idea de como hacerlo y lo puedas hacer tú.
Si necesitas saber que elementos coinciden, puedes poner un append a un tercer vector o cuaquier contenedor de la STL que se adecue mejor al tipo de datos a almacenar.
Con un vector harías:
if (*iter == vector2)
{
vectorelementos.append(*iter);
vectorposicion.append(i);
v
}
Despues con un for imprimes todos loa valores.
Toma los elementos del primer vector y construye un set.
Toma los elementos del Segundo vector y por cada uno de ellos preguntale al set si lo contiene. Si es asi, es parte de la interseccion, sino lo ignoras.