Aracılığıyla paylaş


CArray Sınıf

C dizileri gibi dizileri destekler, ancak gerektiğinde dinamik olarak azaltıp büyüyebilir.

Sözdizimi

template <class TYPE, class ARG_TYPE = const TYPE&>
class CArray : public CObject

Parametreler

TYPE
Dizide depolanan nesnelerin türünü belirten şablon parametresi. TYPE tarafından CArraydöndürülen bir parametredir.

ARG_TYPE
Dizide depolanan nesnelere erişmek için kullanılan bağımsız değişken türünü belirten şablon parametresi. Genellikle öğesine başvurur TYPE. ARG_TYPE , öğesine CArraygeçirilen bir parametredir.

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CArray::CArray Boş bir dizi oluşturur.

Genel Yöntemler

Veri Akışı Adı Açıklama
CArray::Add Dizinin sonuna bir öğe ekler; gerekirse diziyi büyütür.
CArray::Append Diziye başka bir dizi ekler; gerekirse diziyi büyütür
CArray::Copy Diziye başka bir dizi kopyalar; gerekirse diziyi büyütür.
CArray::ElementAt Dizi içindeki öğe işaretçisine geçici bir başvuru döndürür.
CArray::FreeExtra Kullanılmayan tüm belleği geçerli üst sınırın üzerinde serbest bırakır.
CArray::GetAt Belirli bir dizindeki değeri döndürür.
CArray::GetCount Bu dizideki öğelerin sayısını alır.
CArray::GetData Dizideki öğelere erişime izin verir. olabilir NULL.
CArray::GetSize Bu dizideki öğelerin sayısını alır.
CArray::GetUpperBound En büyük geçerli dizini döndürür.
CArray::InsertAt Belirtilen dizine bir öğe (veya başka bir dizideki tüm öğeler) ekler.
CArray::IsEmpty Dizinin boş olup olmadığını belirler.
CArray::RemoveAll Bu dizideki tüm öğeleri kaldırır.
CArray::RemoveAt Belirli bir dizindeki bir öğeyi kaldırır.
CArray::SetAt Belirli bir dizinin değerini ayarlar; dizisinin büyümesine izin verilmiyor.
CArray::SetAtGrow Belirli bir dizinin değerini ayarlar; gerekirse diziyi büyütür.
CArray::SetSize Bu dizide yer alan öğelerin sayısını ayarlar.

Ortak İşleçler

Veri Akışı Adı Açıklama
operator[] Belirtilen dizinde öğesini ayarlar veya alır.

Açıklamalar

Dizi dizinleri her zaman 0 konumundan başlar. Üst sınırın düzeltilmesine veya geçerli sınırın arkasına öğe eklediğinizde dizinin genişletilmesine olanak tanıyabilirsiniz. Bazı öğeler null olsa bile bellek üst sınıra bitişik olarak ayrılır.

Not

Nesneyi CArray yeniden boyutlandıran veya öğe ekleyen yöntemlerin çoğu, öğeleri taşımak için kullanır memcpy_s . Oluşturucunun çağrılması gereken nesnelerle uyumlu olmadığından bu bir sorundur memcpy_s . içindeki CArray öğeler ile memcpy_suyumlu değilse, uygun boyutta yeni CArray bir oluşturmanız gerekir. Bu yöntemler yerine memcpy_satama işleci kullandığından, yeni diziyi doldurmak için ve CArray::SetAt kullanmanız CArray::Copy gerekir.

C dizisinde olduğu gibi, dizine alınan bir CArray öğenin erişim süresi sabittir ve dizi boyutundan bağımsızdır.

İpucu

Diziyi kullanmadan önce, boyutunu oluşturmak ve bunun için bellek ayırmak için kullanın SetSize . kullanmazsanız SetSize, dizinize öğe eklemek sık sık yeniden ayrılmalarına ve kopyalanmalarına neden olur. Sık yeniden konumlandırma ve kopyalama verimsizdir ve belleği parçalayabilir.

Bir dizideki tek tek öğelerin dökümünü almanız gerekiyorsa, nesnenin CDumpContext derinliğini 1 veya daha büyük olarak ayarlamanız gerekir.

Bu sınıfın bazı üye işlevleri, sınıfın çoğu kullanımları CArray için özelleştirilmesi gereken genel yardımcı işlevleri çağırır. MFC Makroları ve GenelLeri bölümündeki Koleksiyon Sınıfı Yardımcıları konusuna bakın.

Dizi sınıfı türetme, liste türetme gibidir.

kullanma hakkında daha fazla bilgi için CArrayKoleksiyonlar makalesine bakın.

Devralma Hiyerarşisi

CObject

CArray

Gereksinimler

Üstbilgi: afxtempl.h

CArray::Add

Dizinin sonuna yeni bir öğe ekleyerek diziyi 1 büyütür.

INT_PTR Add(ARG_TYPE newElement);

Parametreler

ARG_TYPE
Bu dizideki öğelere başvuran bağımsız değişkenlerin türünü belirten şablon parametresi.

newElement
Bu diziye eklenecek öğe.

Dönüş Değeri

Eklenen öğenin dizini.

Açıklamalar

1'den büyük bir nGrowBy değerle kullanıldıysaSetSize, ek bellek ayrılabilir. Ancak, üst sınır yalnızca 1 artar.

Örnek

// example for CArray::Add
CArray<CPoint, CPoint> ptArray;

CPoint pt(10, 20);
ptArray.Add(pt);             // Element 0
ptArray.Add(CPoint(30, 40)); // Element 1

CArray::Append

Bir dizinin içeriğini başka bir dizinin sonuna eklemek için bu üye işlevini çağırın.

INT_PTR Append(const CArray& src);

Parametreler

src
Bir diziye eklenecek öğelerin kaynağı.

Dönüş Değeri

Eklenen ilk öğenin dizini.

Açıklamalar

Diziler aynı türde olmalıdır.

Gerekirse, Append diziye eklenen öğeleri barındırmak için ek bellek ayırabilir.

Örnek

CArray<CPoint, CPoint> myArray1, myArray2;

// Add elements to the second array.
myArray2.Add(CPoint(11, 22));
myArray2.Add(CPoint(12, 42));

// Add elements to the first array and also append the second array.
myArray1.Add(CPoint(1, 2));
myArray1.Append(myArray2);

CArray::CArray

Boş bir dizi oluşturur.

CArray();

Açıklamalar

Dizi her seferinde bir öğe büyütür.

Örnek

CArray<CPoint, CPoint> ptArray;

CArray::Copy

Bir dizinin öğelerini başka bir diziye kopyalamak için bu üye işlevini kullanın.

void Copy(const CArray& src);

Parametreler

src
Bir diziye kopyalanacak öğelerin kaynağı.

Açıklamalar

Bir dizinin öğelerini başka bir dizinin öğeleriyle üzerine yazmak için bu üye işlevini çağırın.

Copy bellek boşaltmaz; ancak gerekirse, Copy diziye kopyalanan öğeleri barındırmak için ek bellek ayırabilir.

Örnek

CArray<CPoint, CPoint> myArray1, myArray2;

// Add elements to the second array.
myArray2.Add(CPoint(11, 22));
myArray2.Add(CPoint(12, 42));

// Copy the elements from the second array to the first.
myArray1.Copy(myArray2);

CArray::ElementAt

Dizi içinde belirtilen öğeye geçici bir başvuru döndürür.

TYPE& ElementAt(INT_PTR nIndex);
const TYPE& ElementAt(INT_PTR nIndex) const;

Parametreler

nIndex
0'dan büyük veya buna eşit ve tarafından GetUpperBounddöndürülen değerden küçük veya buna eşit bir tamsayı dizini.

Dönüş Değeri

Bir dizi öğesine başvuru.

Açıklamalar

Diziler için sol taraftaki atama işlecini uygulamak için kullanılır.

Örnek

örneğine GetSizebakın.

CArray::FreeExtra

Dizi büyütülürken ayrılan tüm ek belleği serbest bırakır.

void FreeExtra();

Açıklamalar

Bu işlevin dizinin boyutu veya üst sınırı üzerinde hiçbir etkisi yoktur.

Örnek

örneğine GetDatabakın.

CArray::GetAt

Belirtilen dizindeki dizi öğesini döndürür.

TYPE& GetAt(INT_PTR nIndex);
const TYPE& GetAt(INT_PTR nIndex) const;

Parametreler

TYPE
Dizi öğelerinin türünü belirten şablon parametresi.

nIndex
0'dan büyük veya buna eşit ve tarafından GetUpperBounddöndürülen değerden küçük veya buna eşit bir tamsayı dizini.

Dönüş Değeri

Şu anda bu dizinde olan dizi öğesi.

Açıklamalar

Negatif bir değerin veya tarafından GetUpperBound döndürülen değerden büyük bir değerin geçirilmesi başarısız onaylama işlemine neden olur.

Örnek

CArray<CPoint, CPoint> myArray;
CPoint pt;

// Add elements to the array.
for (int i = 0; i < 10; i++)
{
   myArray.Add(CPoint(i, 2 * i));
}

// Modify all the points in the array.
for (int i = 0; i <= myArray.GetUpperBound(); i++)
{
   pt = myArray.GetAt(i);
   pt.x = 0;
   myArray.SetAt(i, pt);
}

CArray::GetCount

Dizi öğelerinin sayısını döndürür.

INT_PTR GetCount() const;

Dönüş Değeri

Dizideki öğe sayısı.

Açıklamalar

Dizideki öğe sayısını almak için bu yöntemi çağırın. Dizinler sıfır tabanlı olduğundan, boyut en büyük dizinden 1 büyüktür. Bu yöntemin çağrılması yöntemiyle CArray::GetSize aynı sonucu oluşturur.

Örnek

CArray<CPoint, CPoint> myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
   myArray.Add(CPoint(i, 2 * i));

// Modify all the points in the array.
for (int i = 0; i < myArray.GetCount(); i++)
{
   CPoint &pt = myArray.ElementAt(i);
   pt.x = 0;
}

CArray::GetData

Bir dizideki öğelere doğrudan erişim elde etmek için bu üye işlevini kullanın.

const TYPE* GetData() const;
TYPE* GetData();

Parametreler

TYPE
Dizi öğelerinin türünü belirten şablon parametresi.

Dönüş Değeri

Dizi öğesinin işaretçisi.

Açıklamalar

Kullanılabilir öğe yoksa null GetData değer döndürür.

Dizinin öğelerine doğrudan erişim daha hızlı çalışmanıza yardımcı olsa da, çağırırken GetDatadikkatli olun; yaptığınız hatalar dizinizin öğelerini doğrudan etkiler.

Örnek

CArray<CPoint, CPoint> myArray;

// Allocate memory for at least 32 elements.
myArray.SetSize(32, 128);

// Add elements to the array.
CPoint *pPt = (CPoint *)myArray.GetData();
for (int i = 0; i < 32; i++, pPt++)
{
   *pPt = CPoint(i, 2 * i);
}

// Only keep first 5 elements and free extra (unused) bytes.
myArray.SetSize(5, 128);
myArray.FreeExtra();

#if _DEBUG
afxDump.SetDepth(1);
afxDump << "myArray: " << &myArray << "\n";
#endif

CArray::GetSize

Dizinin boyutunu döndürür.

INT_PTR GetSize() const;

Açıklamalar

Dizinler sıfır tabanlı olduğundan, boyut en büyük dizinden 1 büyüktür. Bu yöntemin çağrılması yöntemiyle CArray::GetCount aynı sonucu oluşturur.

Örnek

CArray<CPoint, CPoint> myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
   myArray.Add(CPoint(i, 2 * i));

// Modify all the points in the array.
for (int i = 0; i < myArray.GetSize(); i++)
{
   CPoint &pt = myArray.ElementAt(i);
   pt.x = 0;
}

CArray::GetUpperBound

Bu dizinin geçerli üst sınırlarını döndürür.

INT_PTR GetUpperBound() const;

Açıklamalar

Dizi dizinleri sıfır tabanlı olduğundan, bu işlev değerinden GetSize1 küçük bir değer döndürür.

= -1 koşulu GetUpperBound( ) dizinin öğe içermediğini gösterir.

Örnek

örneğine CArray::GetAtbakın.

CArray::InsertAt

İlk sürümü InsertAt , bir dizideki belirtilen dizine bir öğe (veya bir öğenin birden çok kopyası) ekler.

void InsertAt(
    INT_PTR nIndex,
    ARG_TYPE newElement,
    INT_PTR nCount = 1);

void InsertAt(
    INT_PTR nStartIndex,
    CArray* pNewArray);

Parametreler

nIndex
tarafından GetUpperBounddöndürülen değerden büyük olabilecek bir tamsayı dizini.

ARG_TYPE
Bu dizideki öğelerin türünü belirten şablon parametresi.

newElement
Bu diziye yerleştirilecek öğe.

nCount
Bu öğenin kaç kez eklenmesi gerektiği (varsayılan olarak 1' olur).

nStartIndex
tarafından GetUpperBounddöndürülen değerden büyük olabilecek bir tamsayı dizini.

pNewArray
Bu diziye eklenecek öğeleri içeren başka bir dizi.

Açıklamalar

İşlemde, bu dizindeki mevcut öğeyi yukarı kaydırarak (dizini artırarak) ve üzerindeki tüm öğeleri yukarı kaydırıyor.

İkinci sürüm, konumdan başlayarak nStartIndex başka bir CArray koleksiyondaki tüm öğeleri ekler.

buna SetAt karşılık işlevi, belirtilen bir dizi öğesinin yerini alır ve hiçbir öğeyi kaydırmaz.

Örnek

// example for CArray::InsertAt

CArray<CPoint, CPoint> ptArray;

ptArray.Add(CPoint(10, 20));         // Element 0
ptArray.Add(CPoint(30, 40));         // Element 1 (will become element 2)
ptArray.InsertAt(1, CPoint(50, 60)); // New element 1

CArray::IsEmpty

Dizinin boş olup olmadığını belirler.

BOOL IsEmpty() const;

Dönüş Değeri

Dizi öğe içermiyorsa sıfır olmayan; aksi takdirde 0.

CArray::operator []

Bu alt simge işleçleri ve GetAt işlevleri için SetAt kullanışlı bir alternatiftir.

TYPE& operator[](int_ptr nindex);
const TYPE& operator[](int_ptr nindex) const;

Parametreler

TYPE
Bu dizideki öğelerin türünü belirten şablon parametresi.

nIndex
Erişilecek öğenin dizini.

Açıklamalar

olmayan constdiziler için çağrılan ilk işleç, atama deyiminin sağ tarafında (r-value) veya solunda (l-value) kullanılabilir. Diziler için const çağrılan ikinci, yalnızca sağda kullanılabilir.

Kitaplığın Hata Ayıklama sürümü, alt simgenin (atama deyiminin solunda veya sağ tarafında) sınırların dışında olup olmadığını onaylar.

Örnek

CArray<CPoint, CPoint> myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
{
   myArray.Add(CPoint(i, 2 * i));
}

// Modify all the points in the array.
for (int i = 0; i <= myArray.GetUpperBound(); i++)
{
   myArray[i].x = 0;
}

CArray::RelocateElements

Dizi büyümesi veya küçülmesi gerektiğinde verileri yeni bir arabelleğe yeniden yerleştirir.

template<class TYPE, class ARG_TYPE>
AFX_INLINE void CArray<TYPE, ARG_TYPE>::RelocateElements(
    TYPE* pNewData,
    const TYPE* pData,
    INT_PTR nCount);

Parametreler

pNewData
Öğe dizisi için yeni bir arabellek.

pData
Eski öğe dizisi.

nCount
Eski dizideki öğe sayısı.

Açıklamalar

pNewData her zaman tüm pData öğeleri barındıracak kadar büyüktür.

Uygulama, CArray dizinin büyümesi veya küçülmesi gerektiğinde (çağrıldığında veya FreeExtra çağrıldığındaSetSize) eski verileri yeni bir arabelleğe kopyalamak için bu yöntemi kullanır. Varsayılan uygulama yalnızca verileri kopyalar.

Bir öğenin kendi üyelerinden birine işaretçi içerdiği veya başka bir yapının dizi öğelerinden birine işaretçi içerdiği diziler için, işaretçiler düz kopya olarak güncelleştirilmez. Bu durumda, ilgili türlerle bir uzmanlığı RelocateElements uygulayarak işaretçileri düzeltebilirsiniz. Veri kopyalama da sizin sorumluluğundadır.

CArray::RemoveAll

Bu dizideki tüm öğeleri kaldırır.

void RemoveAll();

Açıklamalar

Dizi zaten boşsa işlev çalışmaya devam eder.

Örnek

CArray<CPoint, CPoint> myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
   myArray.Add(CPoint(i, 2 * i));

myArray.RemoveAll();

#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << "myArray: " << &myArray << "\n";
#endif

CArray::RemoveAt

Dizideki belirtilen dizinden başlayan bir veya daha fazla öğeyi kaldırır.

void RemoveAt(
    INT_PTR nIndex,
    INT_PTR nCount = 1);

Parametreler

nIndex
0'dan büyük veya buna eşit ve tarafından GetUpperBounddöndürülen değerden küçük veya buna eşit bir tamsayı dizini.

nCount
Kaldırılacak öğe sayısı.

Açıklamalar

İşlemde, kaldırılan öğelerin üzerindeki tüm öğeleri aşağı kaydırır. Dizinin üst sınırlarını azaltmasına rağmen belleği boşaltmaz.

Kaldırma noktasının üzerindeki dizide bulunandan daha fazla öğe kaldırmayı denerseniz, kitaplığın Hata Ayıklama sürümü onaylar.

Örnek

CArray<CPoint, CPoint> myArray;

// Add elements to the array.
for (int i = 0; i < 10; i++)
{
   myArray.Add(CPoint(i, 2 * i));
}

myArray.RemoveAt(5);

#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << "myArray: " << &myArray << "\n";
#endif

CArray::SetAt

Belirtilen dizinde dizi öğesini ayarlar.

void SetAt(INT_PTR nIndex, ARG_TYPE newElement);

Parametreler

nIndex
0'dan büyük veya buna eşit ve tarafından GetUpperBounddöndürülen değerden küçük veya buna eşit bir tamsayı dizini.

ARG_TYPE
Dizi öğelerine başvurmak için kullanılan bağımsız değişkenlerin türünü belirten şablon parametresi.

newElement
Belirtilen konumda depolanacak yeni öğe değeri.

Açıklamalar

SetAt dizinin büyümesine neden olmaz. Dizinin otomatik olarak büyümesini istiyorsanız kullanın SetAtGrow .

Dizin değerinizin dizideki geçerli bir konumu temsildiğinden emin olmanız gerekir. Sınırların dışındaysa kitaplığın Hata Ayıklama sürümü onaylar.

Örnek

örneğine GetAtbakın.

CArray::SetAtGrow

Belirtilen dizinde dizi öğesini ayarlar.

void SetAtGrow(INT_PTR nIndex, ARG_TYPE newElement);

Parametreler

nIndex
0'dan büyük veya 0'a eşit bir tamsayı dizini.

ARG_TYPE
Dizideki öğelerin türünü belirten şablon parametresi.

newElement
Bu diziye eklenecek öğe. Bir NULL değere izin verilir.

Açıklamalar

Gerekirse dizi otomatik olarak büyür (diğer bir ifadeyle üst sınır yeni öğeye uyacak şekilde ayarlanır).

Örnek

// example for CArray::SetAtGrow
CArray<CPoint, CPoint> ptArray;

ptArray.Add(CPoint(10, 20)); // Element 0
ptArray.Add(CPoint(30, 40)); // Element 1
// Element 2 deliberately skipped
ptArray.SetAtGrow(3, CPoint(50, 60)); // Element 3

CArray::SetSize

Boş veya var olan bir dizinin boyutunu oluşturur; gerekirse bellek ayırır.

void SetSize(
    INT_PTR nNewSize,
    INT_PTR nGrowBy = -1);

Parametreler

nNewSize
Yeni dizi boyutu (öğe sayısı). 0'dan büyük veya buna eşit olmalıdır.

nGrowBy
Boyut artışı gerekiyorsa ayrılacak en az öğe yuvası sayısı.

Açıklamalar

Yeni boyut eski boyuttan küçükse dizi kesilir ve kullanılmayan tüm bellek serbest bırakılır.

Diziyi kullanmaya başlamadan önce dizinizin boyutunu ayarlamak için bu işlevi kullanın. kullanmazsanız SetSize, dizinize öğe eklemek sık sık yeniden ayrılmalarına ve kopyalanmalarına neden olur. Sık yeniden konumlandırma ve kopyalama verimsizdir ve belleği parçalayabilir.

parametresi, nGrowBy dizi büyürken iç bellek ayırmayı etkiler. Kullanımı, ve GetUpperBoundtarafından GetSize bildirilen dizi boyutunu hiçbir zaman etkilemez. Varsayılan değer kullanılırsa, MFC bellek parçalanmalarını önlemek ve çoğu durumda verimliliği iyileştirmek için bir şekilde bellek ayırır.

Örnek

örneğine GetDatabakın.

Ayrıca bkz.

MFC Örneği COLLECT
CObject Sınıf
Hiyerarşi Grafiği
CObArray Sınıf
Koleksiyon Sınıfı Yardımcıları