Aracılığıyla paylaş


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 ForwardIteratoraracılığıyla depolamaya erişir. Sınıfının ForwardIteratorilk 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 = xuygulamak 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 Typeeş 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 ForwardIteratoriç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, *thisbö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 firstkullanarak çı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 *thisbir 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