Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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