@daniyo → En general, así no se usan los vectores en C++, eso luce mucho a simple código C ... si bien es legal, en general se usa la librería estándar de C++
Tenes varias formas de hacerlo, las que me llegan a la cabeza:
* Usando los operadores size,at (o el operador [] que esta sobrecargado) de std::vector
* Recorrer el vector como un container usando iteradores (begin y end) con fors anidados
* Usando std::sort y std::adjacent_find
* Usando std::count
* std::map ?
Yo voy a poner la tercera (que no es la mas facil, pero tampoco la mas compleja) ... pero te diría que experimentes con las otras
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; // no abusar de esto !
int main(int argc, char** argv)
{
//1 2 3 4 5 6 7 8 2 9
vector<int> numVector;
numVector.push_back(1);
numVector.push_back(2);
numVector.push_back(3);
numVector.push_back(4);
numVector.push_back(5);
numVector.push_back(6);
numVector.push_back(7);
numVector.push_back(8);
numVector.push_back(2);
numVector.push_back(9);
sort(numVector.begin(),numVector.end()); // Ordenamos
vector<int>::iterator Iterator = adjacent_find(numVector.begin(),numVector.end(), equal_to<int>()); // Usamos busqueda de adyacente, usando equal_to para comparar
if (*Iterator) cout << "Numero repetido : " << *Iterator << endl;
return 0;
}
En el nuevo estandar C++ aprobado (C++11), esto se puede hacer facilmente con for de rango (cuando veas lo simplificados que estan los fors, no vas a querer ver los viejos fors, nunca, pero nunca mas), for_each (usando lambdas), eeeeeeeeeetc ... la creatividad no tiene limites (y menos con C++11 =D ).
Un ejemplo con un minimo toque de C++11 (solo ranged fors) ... que es bastante ineficiente (se re-recorre asquerosamente el vector de manera innecesaria), pero sacrificamos esa eficiencia para tener algo mas potable a los ojos:
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std; // no abusar de esto !
int main(int argc, char** argv)
{
map<int,int> mapNumbers;
vector<int> vecNumbers;
vecNumbers.push_back(1);
vecNumbers.push_back(2);
vecNumbers.push_back(2);
vecNumbers.push_back(3);
vecNumbers.push_back(4);
vecNumbers.push_back(5);
vecNumbers.push_back(6);
vecNumbers.push_back(7);
vecNumbers.push_back(8);
vecNumbers.push_back(8);
vecNumbers.push_back(2);
vecNumbers.push_back(9);
for(int Number: vecNumbers)
{
int numberCount = count(vecNumbers.begin(),vecNumbers.end(),Number);
if ( numberCount > 1) mapNumbers[Number] = numberCount;
}
for(auto valuePair:mapNumbers)
cout << "The number " << valuePair.first << " repeated " << valuePair.second << " times" << endl;
return 0;
}
Simple, sin lambdas, ni hash, ni nada de esa indole por que son features que queman mucho la legibilidad del codigo para alguien que maneja C++03 y ahi nomas ... si alguien quiere un ejemplo mas eficiente y que toque mas cosas de C++11 para ver como es, pida nomas
Saludos.