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 CArray
dö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 CArray
geç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_s
uyumlu değilse, uygun boyutta yeni CArray
bir oluşturmanız gerekir. Bu yöntemler yerine memcpy_s
atama 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 CArray
Koleksiyonlar makalesine bakın.
Devralma Hiyerarşisi
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 GetUpperBound
dö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 GetSize
bakı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 GetData
bakı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 GetUpperBound
dö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 GetData
dikkatli 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 GetSize
1 küçük bir değer döndürür.
= -1 koşulu GetUpperBound( )
dizinin öğe içermediğini gösterir.
Örnek
örneğine CArray::GetAt
bakı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 GetUpperBound
dö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 GetUpperBound
dö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 const
diziler 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 GetUpperBound
dö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 GetUpperBound
dö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 GetAt
bakı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 GetUpperBound
tarafı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 GetData
bakı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ı