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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top