Comparar con size_t, retorno int?
Pregunta
Estoy escribiendo algunos ejemplos de código de "Cómo Pensar como un Informático en C ++", y éste es sobre la manipulación de objetos y las cubiertas de tipo de naipes. Estoy frente a esta situación:
int Card::find(const std::vector<Card>& deck) const {
size_t deckSize = deck.size();
for (size_t i=0; i<deckSize; i++)
if (equals(*this, deck[i])) return i;
return -1;
}
No podía utilizar ".length ()" en un vector en C ++ en Visual Studio 2010 como en el texto, y en su lugar tuvo que usar .size (), que devuelve (creo) std :: size_type. Pensé que podría utilizar size_t y salirse con la suya con el fin de evitar en problemas diferentes arquitecturas, ya que he estado leyendo, pero me pregunto si vuelvo i
, pero es más grande que un número entero, voy a hacer que el programa?
[Editado para ser más específicos en mi pregunta:] Una vez que comience a usar los vectores de las cosas más grandes que las cartas, considerado el uso de unsigned int debido a una advertencia del compilador falta de coincidencia, pero me siento devolver un entero sin signo o int tiene algunos problemas: 1) int no tendrá un índice vectorial suficientemente grande. 2) que devuelve un entero sin signo no me permite ir -1. 3) unsigned int no es igual a size_t en todas las arquitecturas (También estoy haciendo la programación de microcontroladores en un ARM Cortex-M3).
¿Qué debo hacer si alguna vez tiene suficiente grande del vector?
Solución
Colada de size_t
a int
no "choque" de su programa, pero es una mala práctica malo. Por otro lado, STL incluye agradable find
algoritmo para lo que está haciendo.
Otros consejos
int es de 32 bits en 32/64 bits de Windows y Linux. voy a tener truncado si es superior a dos en el 31. usted podría utilizar unsigned int y su programa va a estar bien a menos que el almacenamiento de más de 4 elementos en el vector G:)
size_t
es típicamente un unsigned int
pero no se puede confiar en eso. Si es más grande que un int
no se colgará, vas a desbordamiento en un número (probablemente negativo).
Si se asume que usted no va a tener varias decenas de miles de tarjetas en un vector, estaría feliz de regresar al int
.
También puede volver std::pair<size_t, bool>
, similar a std::map insert()
. Segunda plantilla de medios de argumentos éxito o el fracaso.
Si bien con esto, se podía también utilizar impulso :: opcional