Una gran oferta aquí depende de lo que él quiera decir con una "matriz dinámica". La mayoría de las personas significa algo donde la memoria se asigna con array-new y liberado con array-delete. Si esa es la intención aquí, entonces tener cualidades a la par con std::vector
simplemente no es posible.
La razón es bastante simple: std::vector
asigna de forma rutinaria un trozo de memoria más grande que el necesario para mantener la cantidad de elementos almacenados actualmente. Luego construye objetos en esa memoria según sea necesario para expandirse. Con array-new, sin embargo, no tiene otra opción: está asignando una matriz de objetos, por lo que si asigna espacio para (digamos) 100 objetos, termina con 100 objetos creados en ese espacio (inmediatamente) . Simplemente no tiene ninguna disposición para tener un búfer, una parte de la cual contiene objetos reales, y otra parte es simplemente memoria, que no contiene nada.
Supongo que si desea estirar un punto, es posible imitar std::vector
y aún asignar el espacio con array-new. Para hacerlo, solo tiene que asignar una matriz de char
, y luego usar la ubicación new
para crear objetos en ese espacio de memoria sin formato. Esto permite prácticamente las mismas cosas que std::vector
, porque es casi lo mismo que std::vector
. Sin embargo, todavía nos falta un nivel (potencial) de indirección: std::vector
realmente asigna memoria a través de un objeto Allocator para que pueda cambiar exactamente cómo asigna su memoria bruta (de manera predeterminada usa std::allocator<T>
, que usa operator new
, pero si desea , podrías escribir un asignador que usaría new char[size]
, aunque no puedo imaginar por qué lo harías).
Podrías, por supuesto, escribir tu matriz dinámica para usar un objeto asignador también. En ese punto, para todos los fines prácticos, acaba de reinventar std::vector
bajo un (presumiblemente) nuevo nombre. En ese caso, @sbi sigue teniendo razón: el mero hecho de que no esté estandarizado significa que aún le falta una de las principales cualidades de std:::vector
: la calidad de ser estandarizado y ya conocido por todos los que conocen C++. Incluso sin eso, sin embargo, tenemos que estirar la frase "matriz dinámica" para (y yo postularía, más allá) el punto de ruptura para obtener las mismas cualidades que std::vector
, incluso si ignoramos la estandarización.
Se olvidó de la gran biblioteca de algoritmos enviada gratis con el compilador. – DumbCoder
ver también http://stackoverflow.com/q/381621/1025391 – moooeeeep
oh no .. Dije que no había errores ... escribí incorrectamente arriba y ahora edité – Rajesh