2010-08-23 36 views
19

Hola tengo un programa que se ocupa mucho con los vectores y los índices de los elementos de estos vectores, y me preguntaba:C++ uint, unsigned int, int

  1. ¿hay una diferencia entre uint y unsigned int
  2. que es mejor utilizar uno de los tipos anteriores o simplemente usar int cuando leo que algunas personas dicen que el compilador maneja los valores int de manera más eficiente, pero si usé int tendré que comprobar siempre si hay idx negativos, lo cual es doloroso.
  3. ¿Crees que los iteradores son mejores? ¿es más eficiente que la indexación normal vectorx[idx]?

p.s el software se encargará de los procesos de datos de gran tamaño y un buen rendimiento es una necesidad tiene requisito

Respuesta

29
  1. C++ define tal tipo que uint. Este debe ser "su" tipo, es decir, un tipo definido en su código o en alguna biblioteca de terceros. Uno puede adivinar que es lo mismo que unsigned int. Podría ser unsigned long int o algo más. De todos modos, tienes que verificarlo tú mismo.

  2. Es una cuestión de estilo personal. Yo, por ejemplo, creo que uno tiene que usar tipos sin signo para representar valores naturalmente no negativos, como tamaños o cantidades. No hay diferencia en el rendimiento entre los tipos con y sin firma, aparte de algunos contextos específicos. Yo diría que en la mayoría de los casos es sin firmar tipos que se manejarán de manera más eficiente.

  3. Los iteradores hacen que las implementaciones sean más genéricas, es decir, puede usar el iterador de acceso secuencial y, por lo tanto, hacer que su implementación sea aplicable a cualquier estructura de datos secuencial. Al usar el índice, usted impone el requisito de acceso aleatorio en la estructura de datos, que es un requisito importante. No es una buena idea imponer requisitos fuertes cuando no hay una necesidad real de ellos.

+1

@AndreyT: No sé, pero estoy usando netbeans, el compilador GCC, y ya codifiqué con uint y está funcionando sin ningún tipo de libs. Los 2 y 3 puntos son muy informativos gracias :) –

+14

'uint' es typedef'd como una abreviatura de' unsigned int' por la mayoría de los compiladores. – You

+2

En cualquier caso, no cambia el hecho de que no existe el tipo 'uint' ni en C ni en C++, por lo tanto, a menos que se considere un compilador específico, la pregunta sobre' uint' no tiene una respuesta significativa. – AnT

3

Si está recorriendo el vector de forma secuencial, utilice el iterador. Hay una sobrecarga relacionada con la indexación, independientemente del tipo de índice, que se puede evitar al iterar.

1

1) uint = unsigned int, de hecho uint es sólo un typedef para unsigned int (será reemplazado por unsigned int en tiempo de compilación).

2) Si quiere agregar algo de "seguridad" a su código, evitará los valores negativos.

3) Si ejecuta el vector secuencialmente, vaya con iteradores, están optimizados para el bucle secuencial (son algunos tipos de indicadores).

+2

No es lo suficientemente malo para un voto negativo, pero 'uint' generalmente será un' typedef', no una macro, y firmado contra no firmado tiene poco que ver con seguridad (en todo caso puede causar errores de seguridad, ya que la aritmética sin signo funciona de manera diferente a muchos programadores esperan!) –

+0

Tienes razón para typedef (lo modificaré) Por seguridad, me refiero a una sensación de seguridad para el programador, nada relacionado con el compilador, es por eso que he puesto el "" – Arslan

0

Como otros han dicho cartel, uint es probablemente un typedef para unsigned int Si está utilizando Visual Studio , se puede comprobar este hecho muy rápidamente pulsando F12 mientras el cursor de texto está en uint para ver su definición .