allocator – třída
Šablona třídy popisuje objekt, který spravuje přidělení úložiště a uvolní pole objektů typu Type
. Objekt třídy allocator
je výchozí objekt alokátoru zadaný v konstruktorech pro několik šablon tříd kontejneru ve standardní knihovně jazyka C++.
Syntaxe
template <class Type>
class allocator
Parametry
Typ
Typ objektu, pro který se přiděluje nebo uvolní úložiště.
Poznámky
Všechny kontejnery standardní knihovny C++ mají parametr šablony allocator
, který má výchozí hodnotu . Vytvoření kontejneru pomocí vlastního alokátoru poskytuje kontrolu nad přidělením a uvolněním prvků tohoto kontejneru.
Například objekt alokátoru může přidělit úložiště na privátní haldě nebo ve sdílené paměti, nebo může optimalizovat pro malé nebo velké velikosti objektů. Může také určit, prostřednictvím definic typů, které poskytuje, že prvky budou přístupné prostřednictvím speciálních objektů příslušenství, které spravují sdílenou paměť, nebo provádět automatické uvolňování paměti. Proto by třída, která přiděluje úložiště pomocí objektu alokátoru, měla použít tyto typy pro deklarování ukazatelů a referenčních objektů, jako kontejnery ve standardní knihovně jazyka C++.
(jenom C++98/03) Při odvození z třídy alokátoru musíte zadat rebind strukturu, jejíž _Other
typedef odkazuje na nově odvozenou třídu.
Alokátor tedy definuje následující typy:
Tyto Type
prvky určují formulář, který musí odkazy a ukazatele převzít pro přidělené prvky. ( alokátor::p ointer není nutně stejný jako Type*
pro všechny objekty alokátoru, i když má tuto jasnou definici třídy allocator
.)
C++11 a novější: Pokud chcete povolit operace přesunu v alokátoru, použijte minimální rozhraní alokátoru a implementujte konstruktor kopírování, == a != operátory, přidělte a uvolněte. Další informace a příklad najdete v tématu Alokátory
Členové
Konstruktory
Název | Popis |
---|---|
allocator | Konstruktory používané k vytváření allocator objektů. |
Typedefs
Název | Popis |
---|---|
const_pointer | Typ, který poskytuje konstantní ukazatel na typ objektu spravovaného alokátorem. |
const_reference | Typ, který poskytuje konstantní odkaz na typ objektu spravovaného alokátorem. |
difference_type | Celočíselný typ se signedm, který může představovat rozdíl mezi hodnotami ukazatelů na typ objektu spravovaného alokátorem. |
ukazatel | Typ, který poskytuje ukazatel na typ objektu spravovaného alokátorem. |
odkaz | Typ, který poskytuje odkaz na typ objektu spravovaného alokátorem. |
size_type | Celočíselný typ bez znaménka, který může představovat délku jakékoli sekvence, kterou může objekt typu allocator přidělit. |
value_type | Typ spravovaný alokátorem. |
Funkce
Název | Popis |
---|---|
adresa | Vyhledá adresu objektu, jehož hodnota je zadána. |
allocate | Přidělí blok paměti dostatečně velký, aby ukládaly alespoň určitý zadaný počet prvků. |
konstruovat | Vytvoří konkrétní typ objektu na zadané adrese, která je inicializována se zadanou hodnotou. |
uvolnit | Uvolní zadaný počet objektů od úložiště počínaje zadanou pozicí. |
zničit | Volá destruktor objektů bez uvolnění paměti, ve které byl objekt uložen. |
max_size | Vrátí počet prvků typu Type , které mohou být přiděleny objektem třídy allocator před uvolněním paměti. |
znovu svázat | Struktura, která umožňuje alokátor pro objekty jednoho typu přidělit úložiště pro objekty jiného typu. |
Operátory
Název | Popis |
---|---|
operator= | Přiřadí jeden allocator objekt jinému allocator objektu. |
adresa
Vyhledá adresu objektu, jehož hodnota je zadána.
pointer address(reference val) const;
const_pointer address(const_reference val) const;
Parametry
Val
Hodnota const nebo nonconst objektu, jehož adresa je hledána.
Návratová hodnota
Const nebo nonconst ukazatel na objekt nalezen, v uvedeném pořadí, const nebo nonconst hodnota.
Poznámky
Členské funkce vrací adresu val, ve tvaru, který musí ukazatele přijmout pro přidělené prvky.
Příklad
// allocator_address.cpp
// compile with: /EHsc
#include <memory>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 1 ; i <= 7 ; i++ )
{
v1.push_back( 2 * i );
}
cout << "The original vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
allocator<int>::const_pointer v1Ptr;
const int k = 8;
v1Ptr = v1Alloc.address( *find(v1.begin( ), v1.end( ), k) );
// v1Ptr = v1Alloc.address( k );
cout << "The integer addressed by v1Ptr has a value of: "
<< "*v1Ptr = " << *v1Ptr << "." << endl;
}
The original vector v1 is:
( 2 4 6 8 10 12 14 ).
The integer addressed by v1Ptr has a value of: *v1Ptr = 8.
allocate
Přidělí blok paměti dostatečně velký, aby ukládaly alespoň určitý zadaný počet prvků.
pointer allocate(size_type count, const void* _Hint);
Parametry
count
Počet prvků, pro které je třeba přidělit dostatečné úložiště.
_Náznak
Ukazatel const, který může pomoct objektu alokátoru splnit požadavek na úložiště vyhledáním adresy objektu přiděleného před požadavkem.
Návratová hodnota
Ukazatel na přidělený objekt nebo hodnotu null, pokud nebyla přidělena paměť.
Poznámky
Členová funkce přiděluje úložiště pro pole prvků počtu typu Type
, voláním operátoru new(count). Vrátí ukazatel na přidělený objekt. Argument nápovědy pomáhá některým alokátorům zlepšit lokalitu odkazu; Platná volba je adresa objektu, který byl dříve přidělen stejným objektem alokátoru, a ještě není uvolněn. Pokud chcete zadat žádný tip, použijte místo toho argument ukazatele null.
Příklad
// allocator_allocate.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
allocator<int> v1Alloc;
allocator<int>::pointer v1aPtr;
v1aPtr = v1Alloc.allocate ( 10 );
int i;
for ( i = 0 ; i < 10 ; i++ )
{
v1aPtr[ i ] = i;
}
for ( i = 0 ; i < 10 ; i++ )
{
cout << v1aPtr[ i ] << " ";
}
cout << endl;
v1Alloc.deallocate( v1aPtr, 10 );
}
0 1 2 3 4 5 6 7 8 9
allocator
Konstruktory používané k vytváření objektů alokátoru
allocator();
allocator(const allocator<Type>& right);
template <class Other>
allocator(const allocator<Other>& right);
Parametry
Vpravo
Objekt alokátoru, který se má zkopírovat.
Poznámky
Konstruktor nic nedělá. Obecně platí, že objekt alokátoru vytvořený z jiného objektu alokátoru by se měl porovnat s ním a umožnit vzájemné kombinování přidělení objektů a uvolnění mezi těmito dvěma objekty alokátoru.
Příklad
// allocator_allocator.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
class Int {
public:
Int( int i )
{
cout << "Constructing " << ( void* )this << endl;
x = i;
bIsConstructed = true;
};
~Int( )
{
cout << "Destructing " << ( void* )this << endl;
bIsConstructed = false;
};
Int &operator++( )
{
x++;
return *this;
};
int x;
private:
bool bIsConstructed;
};
int main( )
{
allocator<double> Alloc;
vector <Int>:: allocator_type v1Alloc;
allocator<double> cAlloc(Alloc);
allocator<Int> cv1Alloc(v1Alloc);
if ( cv1Alloc == v1Alloc )
cout << "The allocator objects cv1Alloc & v1Alloc are equal."
<< endl;
else
cout << "The allocator objects cv1Alloc & v1Alloc are not equal."
<< endl;
if ( cAlloc == Alloc )
cout << "The allocator objects cAlloc & Alloc are equal."
<< endl;
else
cout << "The allocator objects cAlloc & Alloc are not equal."
<< endl;
}
The allocator objects cv1Alloc & v1Alloc are equal.
The allocator objects cAlloc & Alloc are equal.
const_pointer
Typ, který poskytuje konstantní ukazatel na typ objektu spravovaného alokátorem.
typedef const value_type *const_pointer;
Poznámky
Typ ukazatele popisuje objekt ptr
, který může prostřednictvím výrazu *ptr
určit libovolný objekt const, který objekt typu allocator
může přidělit.
Příklad
// allocator_const_ptr.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 1 ; i <= 7 ; i++ )
{
v1.push_back( i * 2 );
}
cout << "The original vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
allocator<int>::const_pointer v1Ptr;
const int k = 10;
v1Ptr = v1Alloc.address( k );
cout << "The integer's address found has a value of: "
<< *v1Ptr << "." << endl;
}
The original vector v1 is:
( 2 4 6 8 10 12 14 ).
The integer's address found has a value of: 10.
const_reference
Typ, který poskytuje konstantní odkaz na typ objektu spravovaného alokátorem.
typedef const value_type& const_reference;
Poznámky
Typ odkazu popisuje objekt, který může určit libovolný objekt const, který může objekt typu allocator
přidělit.
Příklad
// allocator_const_ref.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <double> v;
vector <double> ::iterator vIter, vfIter;
vector <double> :: allocator_type vAlloc;
int j;
for ( j = 1 ; j <= 7 ; j++ )
{
v.push_back( 100.0 * j );
}
cout << "The original vector v is:\n ( " ;
for ( vIter = v.begin( ) ; vIter != v.end( ) ; vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
vfIter = v.begin( );
allocator<double>::const_reference vcref =*vfIter;
cout << "The value of the element referred to by vref is: "
<< vcref << ",\n the first element in the vector." << endl;
// const references can have their elements modified,
// so the following would generate an error:
// vcref = 150;
// but the value of the first element could be modified through
// its nonconst iterator and the const reference would remain valid
*vfIter = 175;
cout << "The value of the element referred to by vcref,"
<<"\n after nofication through its nonconst iterator, is: "
<< vcref << "." << endl;
}
The original vector v is:
( 100 200 300 400 500 600 700 ).
The value of the element referred to by vref is: 100,
the first element in the vector.
The value of the element referred to by vcref,
after nofication through its nonconst iterator, is: 175.
konstruovat
Vytvoří konkrétní typ objektu na zadané adrese, která je inicializována se zadanou hodnotou.
void construct(pointer ptr, const Type& val);
void construct(pointer ptr, Type&& val);
template <class _Other>
void construct(pointer ptr, _Other&&... val);
Parametry
ptr
Ukazatel na umístění, kde má být objekt vytvořen.
Val
Hodnota, pomocí které má být objekt vytvořen, má být inicializován.
Poznámky
První členová funkce je ekvivalentní new ((void *) ptr) Type(val)
.
Příklad
// allocator_construct.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 1 ; i <= 7 ; i++ )
{
v1.push_back( 3 * i );
}
cout << "The original vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
allocator<int>::pointer v1PtrA;
int kA = 6, kB = 7;
v1PtrA = v1Alloc.address( *find( v1.begin( ), v1.end( ), kA ) );
v1Alloc.destroy ( v1PtrA );
v1Alloc.construct ( v1PtrA , kB );
cout << "The modified vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
}
The original vector v1 is:
( 3 6 9 12 15 18 21 ).
The modified vector v1 is:
( 3 7 9 12 15 18 21 ).
uvolnit
Uvolní zadaný počet objektů od úložiště počínaje zadanou pozicí.
void deallocate(pointer ptr, size_type count);
Parametry
ptr
Ukazatel na první objekt, který se má uvolnit z úložiště.
count
Počet objektů, které se mají uvolnit z úložiště.
Poznámky
Členské funkce uvolní úložiště pro pole objektů počtu typů Type
začínajících na ptr voláním operator delete(ptr)
. Ukazatel ptr musí být vrácen dříve voláním přidělení objektu alokátoru , který porovnává rovnající se *, přidělení objektu pole se stejnou velikostí a typem. deallocate
nikdy nevyvolá výjimku.
Příklad
Příklad použití členské funkce, viz alokátor::allocate.
zničit
Volá destruktor objektů bez uvolnění paměti, ve které byl objekt uložen.
void destroy(pointer ptr);
Parametry
ptr
Ukazatel označující adresu objektu, který má být zničen.
Poznámky
Člen funkce zničí objekt určený ptr voláním destruktoru ptr->Type::~Type
.
Příklad
// allocator_destroy.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 1 ; i <= 7 ; i++ )
{
v1.push_back( 2 * i );
}
cout << "The original vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
allocator<int>::pointer v1PtrA;
int kA = 12, kB = -99;
v1PtrA = v1Alloc.address( *find(v1.begin( ), v1.end( ), kA) );
v1Alloc.destroy ( v1PtrA );
v1Alloc.construct ( v1PtrA , kB );
cout << "The modified vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
}
The original vector v1 is:
( 2 4 6 8 10 12 14 ).
The modified vector v1 is:
( 2 4 6 8 10 -99 14 ).
difference_type
Celočíselný typ se signedm, který může představovat rozdíl mezi hodnotami ukazatelů na typ objektu spravovaného alokátorem.
typedef ptrdiff_t difference_type;
Poznámky
Typ signed integer popisuje objekt, který může představovat rozdíl mezi adresami libovolných dvou prvků v posloupnosti, kterou objekt typu allocator
může přidělit.
Příklad
// allocator_diff_type.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 0 ; i <= 7 ; i++ )
{
v1.push_back( i * 2 );
}
cout << "The original vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
allocator<int>::const_pointer v1PtrA, v1PtrB;
const int kA = 4, kB =12;
v1PtrA = v1Alloc.address( kA );
v1PtrB = v1Alloc.address( kB );
allocator<int>::difference_type v1diff = *v1PtrB - *v1PtrA;
cout << "Pointer v1PtrA addresses " << *v1PtrA << "." << endl;
cout << "Pointer v1PtrB addresses " << *v1PtrB << "." << endl;
cout << "The difference between the integer's addresses is: "
<< v1diff << "." << endl;
}
The original vector v1 is:
( 0 2 4 6 8 10 12 14 ).
Pointer v1PtrA addresses 4.
Pointer v1PtrB addresses 12.
The difference between the integer's addresses is: 8.
max_size
Vrátí počet prvků typu Type
, které mohou být přiděleny objektem alokátoru třídy před uvolněním paměti.
size_type max_size() const;
Návratová hodnota
Počet prvků, které je možné přidělit.
Příklad
// allocator_max_size.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 1 ; i <= 7 ; i++ )
{
v1.push_back( i );
}
cout << "The original vector v1 is:\n ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
vector <double> v2;
vector <double> ::iterator v2Iter;
vector <double> :: allocator_type v2Alloc;
allocator<int>::size_type v1size;
v1size = v1Alloc.max_size( );
cout << "The number of integers that can be allocated before\n"
<< " the free memory in the vector v1 is used up is: "
<< v1size << "." << endl;
int ii;
for ( ii = 1 ; ii <= 7 ; ii++ )
{
v2.push_back( ii * 10.0 );
}
cout << "The original vector v2 is:\n ( " ;
for ( v2Iter = v2.begin( ) ; v2Iter != v2.end( ) ; v2Iter++ )
cout << *v2Iter << " ";
cout << ")." << endl;
allocator<double>::size_type v2size;
v2size = v2Alloc.max_size( );
cout << "The number of doubles that can be allocated before\n"
<< " the free memory in the vector v2 is used up is: "
<< v2size << "." << endl;
}
operator=
Přiřadí jeden objekt alokátoru jinému objektu alokátoru.
template <class Other>
allocator<Type>& operator=(const allocator<Other>& right);
Parametry
Vpravo
Objekt alokátoru, který má být přiřazen jinému takovému objektu.
Návratová hodnota
Odkaz na objekt alokátoru
Poznámky
Operátor přiřazení šablony nedělá nic. Obecně platí, že objekt alokátoru přiřazený jinému objektu alokátoru by se měl porovnat s ním a umožnit vzájemné kombinování přidělení objektů a uvolnění mezi těmito dvěma objekty alokátoru.
Příklad
// allocator_op_assign.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
class Int {
public:
Int(int i)
{
cout << "Constructing " << ( void* )this << endl;
x = i;
bIsConstructed = true;
};
~Int( ) {
cout << "Destructing " << ( void* )this << endl;
bIsConstructed = false;
};
Int &operator++( )
{
x++;
return *this;
};
int x;
private:
bool bIsConstructed;
};
int main( )
{
allocator<Int> Alloc;
allocator<Int> cAlloc ;
cAlloc = Alloc;
}
ukazatel
Typ, který poskytuje ukazatel na typ objektu spravovaného alokátorem.
typedef value_type *pointer;
Poznámky
Typ ukazatele popisuje objekt ptr
, který lze určit pomocí výrazu *ptr, libovolný objekt, který může objekt typu allocator
přidělit.
Příklad
// allocator_ptr.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <int> v1;
vector <int>::iterator v1Iter;
vector <int>:: allocator_type v1Alloc;
int i;
for ( i = 1 ; i <= 7 ; i++ )
{
v1.push_back( 3 * i );
}
cout << "The original vector v1 is:\n( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ; v1Iter++ )
cout << *v1Iter << " ";
cout << ")." << endl;
allocator<int>::const_pointer v1Ptr;
const int k = 12;
v1Ptr = v1Alloc.address( k );
cout << "The integer addressed by v1Ptr has a value of: "
<< "*v1Ptr = " << *v1Ptr << "." << endl;
}
The original vector v1 is:
( 3 6 9 12 15 18 21 ).
The integer addressed by v1Ptr has a value of: *v1Ptr = 12.
znovu svázat
Struktura, která umožňuje alokátor pro objekty jednoho typu přidělit úložiště pro objekty jiného typu.
struct rebind { typedef allocator<_Other> other; };
Parametry
jiný
Typ prvku, pro který je přidělena paměť.
Poznámky
Tato struktura je užitečná pro přidělování paměti pro typ, který se liší od typu prvku implementovaného kontejneru.
Šablona třídy člena definuje typ jiný. Jediným účelem je zadat název allocator<_Other>
typu s názvem typu allocator<Type>
.
Například vzhledem k objektu al
alokátoru typu A
můžete přidělit objekt typu _Other
pomocí výrazu:
A::rebind<Other>::other(al).allocate(1, (Other *)0)
Nebo můžete typ ukazatele pojmenovat zadáním tohoto typu:
A::rebind<Other>::other::pointer
Příklad
// allocator_rebind.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef vector<int>::allocator_type IntAlloc;
int main( )
{
IntAlloc v1Iter;
vector<int> v1;
IntAlloc::rebind<char>::other::pointer pszC =
IntAlloc::rebind<char>::other(v1.get_allocator()).allocate(1, (void *)0);
int * pInt = v1Iter.allocate(10);
}
reference
Typ, který poskytuje odkaz na typ objektu spravovaného alokátorem.
typedef value_type& reference;
Poznámky
Typ odkazu popisuje objekt, který může určit libovolný objekt, který může objekt typu allocator
přidělit.
Příklad
// allocator_reference.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <double> v;
vector <double> ::iterator vIter, vfIter;
vector <double> :: allocator_type vAlloc;
int j;
for ( j = 1 ; j <= 7 ; j++ )
{
v.push_back( 100.0 * j );
}
cout << "The original vector v is:\n ( " ;
for ( vIter = v.begin( ) ; vIter != v.end( ) ; vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
vfIter = v.begin( );
allocator<double>::reference vref =*vfIter;
cout << "The value of the element referred to by vref is: "
<< vref << ",\n the first element in the vector." << endl;
// nonconst references can have their elements modified
vref = 150;
cout << "The element referred to by vref after being modified is: "
<< vref << "." << endl;
}
The original vector v is:
( 100 200 300 400 500 600 700 ).
The value of the element referred to by vref is: 100,
the first element in the vector.
The element referred to by vref after being modified is: 150.
size_type
Celočíselný typ bez znaménka, který může představovat délku jakékoli sekvence, kterou může objekt typu allocator
přidělit.
typedef size_t size_type;
Příklad
// allocator_size_type.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <double> v;
vector <double> ::iterator vIter;
vector <double> :: allocator_type vAlloc;
int j;
for ( j = 1 ; j <= 7 ; j++ )
{
v.push_back( 100.0 * j );
}
cout << "The original vector v is:\n ( " ;
for ( vIter = v.begin( ) ; vIter != v.end( ) ; vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
allocator<double>::size_type vsize;
vsize = vAlloc.max_size( );
cout << "The number of doubles that can be allocated before\n"
<< " the free memory in the vector v is used up is: "
<< vsize << "." << endl;
}
value_type
Typ spravovaný alokátorem.
typedef Type value_type;
Poznámky
Typ je synonymem pro parametr Type
šablony .
Příklad
// allocator_value_type.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector <double> v;
vector <double> ::iterator vIter, vfIter;
vector <double> :: allocator_type vAlloc;
int j;
for ( j = 1 ; j <= 7 ; j++ )
{
v.push_back( 100.0 * j );
}
cout << "The original vector v is:\n ( " ;
for ( vIter = v.begin( ) ; vIter != v.end( ) ; vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
vfIter = v.begin( );
allocator<double>::value_type vecVal = 150.0;
*vfIter = vecVal;
cout << "The value of the element addressed by vfIter is: "
<< *vfIter << ",\n the first element in the vector." << endl;
cout << "The modified vector v is:\n ( " ;
for ( vIter = v.begin( ) ; vIter != v.end( ) ; vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
The original vector v is:
( 100 200 300 400 500 600 700 ).
The value of the element addressed by vfIter is: 150,
the first element in the vector.
The modified vector v is:
( 150 200 300 400 500 600 700 ).
Pomocníci
allocator_arg_t
struct allocator_arg_t { explicit allocator_arg_t() = default; };
inline constexpr allocator_arg_t allocator_arg{};
uses_allocator
template <class T, class Alloc> struct uses_allocator;