2012-06-02 28 views
11

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++?

+1

Casi nunca uso arrays es mi sugerencia. Pero, por arreglo, ¿quiere decir 'tipo []' o 'std :: array'? –

+0

@ RichardJ.RossIII tipo [] –

+0

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

Respuesta

14

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.

+2

Afortunadamente 'std :: vector ' es una vez más un contenedor verdadero en ** C++ 11 ** –

+0

@ K-ballo Right, publicación editada a la cuenta para esto. –

+0

+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. –

2

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 :)

+1

Puede pasar vectores en cuando se espera una matriz: 'someFunc (&v[0]);'. – chris

+0

@chris, muy cierto. – kotakotakota

+0

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

Cuestiones relacionadas