Se si desidera un tempo di compilazione fisso dimensione specificata (ala std::array<T, N>
), ma si desidera essere in grado di popolare il vettore con un numero variabile di elementi tra 0
e N
, quindi una buona opzione è eastl::fixed_vector
.
std :: vector:
La dimensione di un std::vector
è dinamico - che assegnerà memoria richiesto in modo dinamico, e non è possibile limitare la dimensione e far rispettare un errore.
È tuttavia possibile reserve
una certa dimensione e quindi aggiungere elementi di dimensioni tali prima che sia necessario allocare nuovo spazio di archiviazione.
vector.size()
è inizialmente 0, e aumenta quando si aggiungono elementss
std :: array:
La dimensione di un std::array
è una costante della fase di compilazione - allocherà memoria necessario staticamente, e non puoi cambiare la taglia.
array.size()
è sempre la dimensione della matrice, ed è pari a array.max_size()
eastl :: f ixed_vector:
Le dimensioni di un eastl::fixed_vector
possono essere statici o dinamici.
Assegnerà inizialmente un certo numero di elementi e, se si consente la crescita dinamica, verrà allocata dinamicamente se necessario.
Ai fini originariamente chiesto, è possibile disabilitare la crescita (tramite bEnableOverflow
nel modello di istanza di seguito)
fixed_vector.size()
è inizialmente 0, e aumenta quando si aggiungono elementi.
template<typename T,
size_t nodeCount,
bool bEnableOverflow = true,
typename OverflowAllocator =
typename eastl::type_select<bEnableOverflow,
EASTLAllocatorType,
EASTLDummyAllocatorType>::type>
class fixed_vector;
semplice esempio:
#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;
}
uscita:
size=0 capacity=10
size=10 capacity=10
size=0 capacity=10
Si noti che la dimensione del array
è 10, mentre vector
e fixed_vector
sono 0
se fosse un vettore di un tipo definito dall'utente che è stato dato una dimensione iniziale, a cosa sarebbe inizializzato? – simplename