Si desea un tiempo de compilación fijo determinado tamaño (ala std::array<T, N>
), pero desea poder poblar el vector con diferentes números de elementos entre 0
y N
, entonces una buena opción es eastl::fixed_vector
.
std :: vector:
El tamaño de un std::vector
es dinámico - se destinará requerido de almacenamiento de forma dinámica, y no se puede limitar el tamaño y hacer cumplir un error.
Sin embargo, puede reserve
un cierto tamaño, y luego agregar elementos de ese tamaño antes de que necesite asignar almacenamiento nuevo.
vector.size()
es inicialmente 0, y se incrementa a medida que agrega elementss
std :: matriz:
El tamaño de un std::array
es una constante en tiempo de compilación - se destinará almacenamiento necesaria estáticamente, y no puedes cambiar el tamaño
array.size()
es siempre el tamaño de la matriz, y es igual a array.max_size()
eastl :: fixed_vector:
El tamaño de un eastl::fixed_vector
pueden ser estáticos o dinámicos.
Al principio, asignará un cierto número de elementos y, si permite el crecimiento dinámico, se asignará dinámicamente si es necesario.
A los efectos que hayan solicitado inicialmente, puede desactivar el crecimiento (a través de la creación de instancias bEnableOverflow
en plantilla a continuación)
fixed_vector.size()
es inicialmente 0, y se incrementa a medida que agrega elementos.
template<typename T,
size_t nodeCount,
bool bEnableOverflow = true,
typename OverflowAllocator =
typename eastl::type_select<bEnableOverflow,
EASTLAllocatorType,
EASTLDummyAllocatorType>::type>
class fixed_vector;
ejemplo simple:
#include <iostream>
#include <vector>
#include <array>
#include "EASTL/fixed_vector.h"
int main()
{
std::vector<int> v;
v.reserve(10);
std::cout << "size=" << v.size() << " capacity=" << v.capacity() << '\n';
std::array<int, 10> a;
std::cout << "size=" << a.size() << " capacity=" << a.max_size() << '\n';
eastl::fixed_vector<int, 10, false> fv;
std::cout << "size=" << fv.size() << " capacity=" << fv.capacity() << '\n';
return 0;
}
Salida:
size=0 capacity=10
size=10 capacity=10
size=0 capacity=10
Tenga en cuenta que el tamaño de array
es de 10, mientras que vector
y fixed_vector
son 0
si era un vector de algún tipo definido por el usuario que se le dio un tamaño inicial, ¿en qué se inicializaría? – simplename