raw_storage_iterator Sınıfı
Algoritmaların başlatılmamış belleğe sonuçları depolamasını sağlamak üzere oluşturulmuş bağdaştırıcı sınıfı.
Sözdizimi
template <class OutputIterator, class Type>
class raw_storage_iterator
Parametreler
OutputIterator
Depolanmakta olan nesne için çıkış yineleyicisini belirtir.
Tür
Depolamanın ayrıldığı nesnenin türü.
Açıklamalar
sınıfı, oluşturduğu sırada türündeki Type
nesneleri oluşturan bir çıkış yineleyicisini açıklar. Sınıfının bir nesnesi raw_storage_iterator
<olan ForwardIterator, Type>, nesnesini oluştururken belirttiğiniz sınıfının ileriye doğru yineleyici nesnesi ForwardIterator
aracılığıyla depolamaya erişir. Sınıfının ForwardIterator
ilk nesnesi için, &*first ifadesi, oluşturulan dizideki bir sonraki nesne (türüType
) için yapılandırılmamış depolama alanı belirlemelidir.
Bu bağdaştırıcı sınıfı, bellek ayırma ve nesne oluşturmanın ayrılması gerektiğinde kullanılır. raw_storage_iterator
işlevi kullanılarak ayrılan bellek gibi, nesneleri başlatılmamış depolama alanına malloc
kopyalamak için kullanılabilir.
Üyeler
Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
raw_storage_iterator | Belirtilen temel alınan çıkış yineleyicisi ile bir ham depolama yineleyicisi oluşturur. |
Tür tanımları
Veri Akışı Adı | Açıklama |
---|---|
element_type | Ham depolama yineleyicisi depolanacak bir öğeyi açıklayan bir tür sağlar. |
iter_type | Ham depolama yineleyicisini temel oluşturan bir yineleyiciyi açıklayan bir tür sağlar. |
İşleçler
Veri Akışı Adı | Açıklama |
---|---|
operatör* | Çıkış yineleyici ifadesini * ii = x uygulamak için kullanılan bir başvuru kaldırma işleci. |
operator= | Bellekte depolama için * ham depolama yineleyici ifadesini i = x uygulamak için kullanılan atama işleci. |
operator++ | Ham depolama yineleyicileri için öncrement ve postincrement işleçleri. |
element_type
Ham depolama yineleyicisi depolanacak bir öğeyi açıklayan bir tür sağlar.
typedef Type element_type;
Açıklamalar
türü, raw_storage_iterator sınıf şablonu parametresinin Type
eş anlamlısıdır.
iter_type
Ham depolama yineleyicisini temel oluşturan bir yineleyiciyi açıklayan bir tür sağlar.
typedef ForwardIterator iter_type;
Açıklamalar
türü, şablon parametresi ForwardIterator
için bir eş anlamlıdır.
operatör*
* ii = x ham depolama yineleyicisi ifadesini uygulamak için kullanılan başvuru kaldırma işleci.
raw_storage_iterator<ForwardIterator, Type>& operator*();
Dönüş Değeri
Ham depolama yineleyicisine başvuru
Açıklamalar
için ForwardIterator
gereksinimler, ham depolama yineleyicisinin karşılaması, yalnızca * ii = ifadesinin geçerli olmasını gerektirmesi ve veya operator=
kendi başına ile ilgili operator
hiçbir şey yazmamasıdır. Bu uygulamadaki üye işleçleri döndürür, *this
böylece operator=(constType&) bir ifadede * ptr = val
gibi gerçek depoyu gerçekleştirebilir.
Örnek
// raw_storage_iterator_op_deref.cpp
// compile with: /EHsc
#include <iostream>
#include <iterator>
#include <memory>
#include <list>
using namespace std;
class Int
{
public:
Int(int i)
{
cout << "Constructing " << i << endl;
x = i;
bIsConstructed = true;
};
Int &operator=(int i)
{
if (!bIsConstructed)
cout << "Not constructed.\n";
cout << "Copying " << i << endl;
x = i;
return *this;
};
int x;
private:
bool bIsConstructed;
};
int main( void)
{
Int *pInt = ( Int* ) malloc( sizeof( Int ) );
memset( pInt, 0, sizeof( Int ) ); // Set bIsConstructed to false;
*pInt = 5;
raw_storage_iterator< Int*, Int > it( pInt );
*it = 5;
}
Not constructed.
Copying 5
Constructing 5
operator=
Bellekte depolamak için * i = x ham depolama yineleyici ifadesini uygulamak için kullanılan atama işleci.
raw_storage_iterator<ForwardIterator, Type>& operator=(
const Type& val);
Parametreler
Val
Belleğe eklenecek türündeki Type
nesnenin değeri.
Dönüş Değeri
işleci belleğe ekler val
ve ham depolama yineleyicisine bir başvuru döndürür.
Açıklamalar
Ham depolama yineleyicisinin karşılaması gereken bir ForwardIterator
durumun gereksinimleri, yalnızca * ii = ifadesinin geçerli olmasını ve veya operator=
kendi başına ile ilgili operator
hiçbir şey söylemesini gerektirmez. Bu üye işleçler döndürür *this
.
Atama işleci, yeni yerleştirme ifadesini new ( (void*) & *first ) Type( val )
değerlendirerek depolanan yineleyici değerini first
kullanarak çıkış dizisindeki bir sonraki nesneyi oluşturur.
Örnek
// raw_storage_iterator_op_assign.cpp
// compile with: /EHsc
#include <iostream>
#include <iterator>
#include <memory>
#include <list>
using namespace std;
class Int
{
public:
Int( int i )
{
cout << "Constructing " << i << endl;
x = i;
bIsConstructed = true;
};
Int &operator=( int i )
{
if ( !bIsConstructed )
cout << "Not constructed.\n";
cout << "Copying " << i << endl; x = i;
return *this;
};
int x;
private:
bool bIsConstructed;
};
int main( void )
{
Int *pInt = ( Int* )malloc( sizeof( Int ) );
memset( pInt, 0, sizeof( Int ) ); // Set bIsConstructed to false;
*pInt = 5;
raw_storage_iterator<Int*, Int> it( pInt );
*it = 5;
}
Not constructed.
Copying 5
Constructing 5
operator++
Ham depolama yineleyicileri için öncrement ve postincrement işleçleri.
raw_storage_iterator<ForwardIterator, Type>& operator++();
raw_storage_iterator<ForwardIterator, Type> operator++(int);
Dönüş Değeri
Ham depolama yineleyicisi veya ham depolama yineleyicisine başvuru.
Açıklamalar
İlk işleç sonunda ilişkili giriş akışından türdeki CharType
bir nesneyi ayıklamayı ve depolamayı dener. İkinci işleç nesnenin bir kopyasını oluşturur, nesneyi artırır ve sonra kopyayı döndürür.
İlk preincrement işleci, depolanan çıkış yineleyici nesnesini artırır ve döndürür *this
.
İkinci postincrement işleci, öğesinin *this
bir kopyasını oluşturur, depolanan çıkış yineleyici nesnesini artırır ve ardından kopyayı döndürür.
Oluşturucu çıkış yineleyici nesnesi olarak depolar first
.
Örnek
// raw_storage_iterator_op_incr.cpp
// compile with: /EHsc
#include <iostream>
#include <iterator>
#include <memory>
#include <list>
using namespace std;
int main( void )
{
int *pInt = new int[5];
std::raw_storage_iterator<int*,int> it( pInt );
for ( int i = 0; i < 5; i++, it++ ) {
*it = 2 * i;
};
for ( int i = 0; i < 5; i++ ) cout << "array " << i << " = " << pInt[i] << endl;;
delete[] pInt;
}
array 0 = 0
array 1 = 2
array 2 = 4
array 3 = 6
array 4 = 8
raw_storage_iterator
Belirtilen temel alınan çıkış yineleyicisi ile bir ham depolama yineleyicisi oluşturur.
explicit raw_storage_iterator(ForwardIterator first);
Parametreler
birinci
Oluşturmakta olan nesnenin altında yatan ileri yineleyici raw_storage_iterator
.
Örnek
// raw_storage_iterator_ctor.cpp
// compile with: /EHsc /W3
#include <iostream>
#include <iterator>
#include <memory>
#include <list>
using namespace std;
class Int
{
public:
Int(int i)
{
cout << "Constructing " << i << endl;
x = i;
bIsConstructed = true;
};
Int &operator=( int i )
{
if (!bIsConstructed)
cout << "Error! I'm not constructed!\n";
cout << "Copying " << i << endl; x = i; return *this;
};
int x;
bool bIsConstructed;
};
int main( void )
{
std::list<int> l;
l.push_back( 1 );
l.push_back( 2 );
l.push_back( 3 );
l.push_back( 4 );
Int *pInt = (Int*)malloc(sizeof(Int)*l.size( ));
memset (pInt, 0, sizeof(Int)*l.size( ));
// Hack: make sure bIsConstructed is false
std::copy( l.begin( ), l.end( ), pInt ); // C4996
for (unsigned int i = 0; i < l.size( ); i++)
cout << "array " << i << " = " << pInt[i].x << endl;;
memset (pInt, 0, sizeof(Int)*l.size( ));
// hack: make sure bIsConstructed is false
std::copy( l.begin( ), l.end( ),
std::raw_storage_iterator<Int*,Int>(pInt)); // C4996
for (unsigned int i = 0; i < l.size( ); i++ )
cout << "array " << i << " = " << pInt[i].x << endl;
free(pInt);
}
Error! I'm not constructed!
Copying 1
Error! I'm not constructed!
Copying 2
Error! I'm not constructed!
Copying 3
Error! I'm not constructed!
Copying 4
array 0 = 1
array 1 = 2
array 2 = 3
array 3 = 4
Constructing 1
Constructing 2
Constructing 3
Constructing 4
array 0 = 1
array 1 = 2
array 2 = 3
array 3 = 4