Normalmente no estoy seguro de cuándo es mejor usar uno frente al otro. Ambos parecen hacer las mismas cosas en general pero ¿es el vector más flexible en términos de lo que puede hacer? ¿Cuándo son las matrices más apropiadas?Cuándo usar vectores y cuándo usar matrices en C++?
Respuesta
Generalmente siempre prefieren usando std::vector<T>
desde la destrucción será automática una vez que el vector se apaga alcance y la memoria asignada será colocado cuidadosamente en el montón y toda la memoria será manejado para ti. std::vector<T>
le ofrece todo lo que obtiene en una matriz e incluso una garantía de que los elementos se almacenarán contiguamente en la memoria (excepto por std::vector<bool>
).
En el caso de std::vector<bool>
que tienen que tener cuidado ya que el código como éste se romperá:
std::vector<bool> vb;
vb.push_back(true);
vb.push_back(false);
vb.push_back(true);
bool *pB = &vb[0];
if(*(pB+1))
{
// do something
}
El hecho es que, std::vector<bool>
no almacena contiguos bool
s. Esta es una excepción en el estándar que se repara en C++ 11.
Afortunadamente 'std :: vector
@ K-ballo Right, publicación editada a la cuenta para esto. –
+1 para * se colocará ** prolijamente ** en el montón * (énfasis mío), lo que significa que escribir accidentalmente fuera de la matriz no destruirá la pila. –
Solo utilizo matrices cuando trabajo con sistemas integrados, o cuando ciertas API lo requieren (es decir, los tomo como argumento para una función). Además, si solo hay uno o dos lugares donde necesitaría usar matrices, o no necesita específicamente la funcionalidad vectorial, tiene más sentido usar matrices solo por la sobrecarga adicional de vector.h.
De lo contrario, sólo tiene que utilizar vectores :)
Puede pasar vectores en cuando se espera una matriz: 'someFunc (&v[0]);'. – chris
@chris, muy cierto. – kotakotakota
Sin embargo, su otro punto es válido. Dependiendo de cómo y con qué frecuencia use la matriz, así como su las necesidades del programa, la sobrecarga de un vector puede ser excesiva. – chris
- 1. Cuándo usar categorías y cuándo usar subclases?
- 2. Cuándo usar undef_method, y cuándo usar remove_method?
- 3. cuándo usar Tarea y cuándo usar Subproceso?
- 4. Cuándo usar Pepino y cuándo usar RSpec?
- 5. ¿Cuándo usar == y cuándo usarlo?
- 6. Cuándo usar `zipmap` y cuándo` map vector`?
- 7. Cuándo usar componentes y cuándo usar extensiones en Yii?
- 8. Cuándo usar dup, y cuándo usar clon en Ruby?
- 9. Cuándo usar "nuevo" y cuándo no hacerlo, en C++?
- 10. ¿Cuándo debo usar malloc en C y cuándo no?
- 11. Cuándo usar extern "C"?
- 12. C++: cuándo usar punteros?
- 13. Cuándo usar Restringir y cuándo no a
- 14. Cuándo usar Ruby vs Cuándo usar PHP
- 15. Cuándo usar .mdf y cuándo .sdf?
- 16. Cuándo usar OSGi EventAdmin y cuándo no?
- 17. Cuándo usar un módulo y cuándo usar una clase
- 18. ¿Cuándo debe usar JCR y cuándo debe usar JPA/RDBMS?
- 19. Cuándo usar Requirejs y cuándo usar javascript incluido?
- 20. Cuándo usar assert() y cuándo usar try catch?
- 21. Cuándo usar y cuándo no usar Try Catch Finally
- 22. Cuándo usar el sistema() y cuándo usar execv *()?
- 23. ¿Cuándo debería usar TCP_NODELAY y cuándo TCP_CORK?
- 24. cuándo deberíamos usar instanceof y cuándo no
- 25. ¿Cuándo debería usar Silverlight y cuándo XNA?
- 26. Cuándo usar GWT y cuándo no
- 27. Cuándo usar Class.isInstance() y cuándo usar el operador instanceof?
- 28. ¿Cuándo debería usar require() y cuándo usar define()?
- 29. Cuándo deberíamos usar mutex y cuándo deberíamos usar el semáforo
- 30. Cómo usar y cuándo es bueno usar memmove en C?
Casi nunca uso arrays es mi sugerencia. Pero, por arreglo, ¿quiere decir 'tipo []' o 'std :: array'? –
@ RichardJ.RossIII tipo [] –
La principal diferencia entre un vector y una matriz, en un sentido de C++, es que los vectores realizan una gestión de memoria dinámica automática, mientras que los arreglos son fijos. – chris