Wenn Sie eine feste Übersetzungszeit festgelegte Größe (ala std::array<T, N>
) mögen, aber Sie möchten in der Lage sein, den Vektor mit einer unterschiedlichen Anzahl von Elementen zwischen 0
und N
zu füllen, dann ist eine gute Option eastl::fixed_vector
.
std :: vector:
Die Größe eines std::vector
ist dynamisch - es wird dynamisch erforderliche Speicher zuweisen, und Sie können nicht die Größe begrenzen und einen Fehler erzwingen.
Sie können jedoch reserve
eine bestimmte Größe, und fügen Sie Elemente dann auf diese Größe, bevor es neuen Speicher zuweisen muss.
vector.size()
ist zunächst 0 und erhöht sich, wenn Sie elementss
std :: Array hinzufügen:
Die Größe eines std::array
ist eine Kompilierung-Konstante - es wird erforderlich Lagerung statisch zuweisen, und Sie können die Größe nicht ändern.
array.size()
ist immer der Größe des Arrays, und ist gleich array.max_size()
eastl :: fixed_vector:
Die Größe eines eastl::fixed_vector
kann entweder statisch oder dynamisch sein.
Es wird zunächst eine bestimmte Anzahl von Elementen zugewiesen, und wenn Sie dynamisches Wachstum zulassen, wird es bei Bedarf dynamisch zugewiesen.
Für die Zwecke ursprünglich gefragt, können Sie das Wachstum (über bEnableOverflow
in der Vorlage Instanziierung unten) deaktivieren
fixed_vector.size()
anfänglich 0 ist, und erhöht sich, wenn Sie Elemente hinzufügen.
template<typename T,
size_t nodeCount,
bool bEnableOverflow = true,
typename OverflowAllocator =
typename eastl::type_select<bEnableOverflow,
EASTLAllocatorType,
EASTLDummyAllocatorType>::type>
class fixed_vector;
Einfaches Beispiel:
#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;
}
Ausgang:
size=0 capacity=10
size=10 capacity=10
size=0 capacity=10
Beachten Sie, dass die Größe der array
10 ist, während vector
und fixed_vector
sind 0
wenn es ein Vektor eines benutzerdefinierten Typs ist, der angegeben wurde eine anfängliche Größe, womit würde es initialisiert werden? – simplename