CObArray
Klasa
Obsługuje tablice CObject
wskaźników.
Składnia
class CObArray : public CObject
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CObArray::CObArray |
Tworzy pustą tablicę wskaźników CObject . |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CObArray::Add |
Dodaje element na końcu tablicy; w razie potrzeby zwiększa tablicę. |
CObArray::Append |
Dołącza kolejną tablicę do tablicy; w razie potrzeby zwiększa tablicę. |
CObArray::Copy |
Kopiuje kolejną tablicę do tablicy; w razie potrzeby zwiększa tablicę. |
CObArray::ElementAt |
Zwraca tymczasowe odwołanie do wskaźnika elementu w tablicy. |
CObArray::FreeExtra |
Zwalnia całą nieużywaną pamięć powyżej bieżącej górnej granicy. |
CObArray::GetAt |
Zwraca wartość dla danego indeksu. |
CObArray::GetCount |
Pobiera liczbę elementów w tej tablicy. |
CObArray::GetData |
Umożliwia dostęp do elementów w tablicy. Może to być NULL . |
CObArray::GetSize |
Pobiera liczbę elementów w tej tablicy. |
CObArray::GetUpperBound |
Zwraca największy prawidłowy indeks. |
CObArray::InsertAt |
Wstawia element (lub wszystkie elementy w innej tablicy) w określonym indeksie. |
CObArray::IsEmpty |
Określa, czy tablica jest pusta. |
CObArray::RemoveAll |
Usuwa wszystkie elementy z tej tablicy. |
CObArray::RemoveAt |
Usuwa element w określonym indeksie. |
CObArray::SetAt |
Ustawia wartość dla danego indeksu; tablica nie może rosnąć. |
CObArray::SetAtGrow |
Ustawia wartość dla danego indeksu; w razie potrzeby zwiększa tablicę. |
CObArray::SetSize |
Ustawia liczbę elementów, które mają być zawarte w tej tablicy. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CObArray::operator [] |
Ustawia lub pobiera element w określonym indeksie. |
Uwagi
Te tablice obiektów są podobne do tablic języka C, ale mogą dynamicznie zmniejszać i rosnąć w razie potrzeby.
Indeksy tablic zawsze zaczynają się od pozycji 0. Możesz zdecydować, czy naprawić górną granicę, czy zezwolić tablicy na rozwinięcie podczas dodawania elementów poza bieżącą granicą. Pamięć jest przydzielana w sposób ciągły do górnej granicy, nawet jeśli niektóre elementy to NULL
.
W systemie Win32 rozmiar obiektu jest ograniczony tylko do dostępnej CObArray
pamięci.
Podobnie jak w przypadku tablicy C, czas dostępu dla CObArray
indeksowanego elementu jest stały i jest niezależny od rozmiaru tablicy.
CObArray
IMPLEMENT_SERIAL
uwzględnia makro w celu wspierania serializacji i dumpingu jej elementów. Jeśli tablica CObject
wskaźników jest przechowywana w archiwum, z przeciążonym operatorem wstawiania lub z Serialize
funkcją składową, każdy CObject
element jest z kolei serializowany wraz z indeksem tablicy.
Jeśli potrzebujesz zrzutu poszczególnych CObject
elementów w tablicy, musisz ustawić głębokość CDumpContext
obiektu na 1 lub większą.
CObArray
Gdy obiekt zostanie usunięty lub gdy jego elementy zostaną usunięte, zostaną usunięte tylko CObject
wskaźniki, a nie obiekty, do których się odwołują.
Uwaga
Przed użyciem tablicy użyj polecenia SetSize
, aby ustanowić jego rozmiar i przydzielić dla niej pamięć. Jeśli nie używasz polecenia SetSize
, dodanie elementów do tablicy powoduje, że jest on często ponownie przydzielany i kopiowany. Częste reallokowanie i kopiowanie są nieefektywne i mogą fragmentować pamięć.
Wyprowadzanie klasy tablicy jest podobne do wyprowadzania listy. Aby uzyskać szczegółowe informacje na temat wyprowadzania klasy listy specjalnego przeznaczenia, zobacz artykuł Kolekcje.
Uwaga
Jeśli zamierzasz serializować tablicę, musisz użyć makra IMPLEMENT_SERIAL w implementacji klasy pochodnej.
Hierarchia dziedziczenia
CObArray
Wymagania
Nagłówek: afxcoll.h
CObArray::Add
Dodaje nowy element na końcu tablicy, zwiększając tablicę o 1.
INT_PTR Add(CObject* newElement);
Parametry
newElement
Wskaźnik CObject
, który ma zostać dodany do tej tablicy.
Wartość zwracana
Indeks dodanego elementu.
Uwagi
Jeśli SetSize
użyto wartości większej niż 1, można przydzielić dodatkową nGrowBy
pamięć. Jednak górna granica zwiększy się o tylko 1.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::Add
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
INT_PTR Add(BYTE newElement); throw(CMemoryException*); |
CDWordArray |
INT_PTR Add(DWORD newElement); throw(CMemoryException*); |
CPtrArray |
INT_PTR Add(void* newElement); throw(CMemoryException*); |
CStringArray |
INT_PTR Add(LPCTSTR newElement); throw(CMemoryException*); INT_PTR Add(const CString& newElement); |
CUIntArray |
INT_PTR Add(UINT newElement); throw(CMemoryException*); |
CWordArray |
INT_PTR Add(WORD newElement); throw(CMemoryException*); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("Add example: ") << &arr << _T("\n");
#endif
Wyniki z tego programu są następujące:
Add example: A CObArray with 2 elements
[0] = a CAge at $442A 21
[1] = a CAge at $4468 40
CObArray::Append
Wywołaj tę funkcję składową, aby dodać zawartość innej tablicy na końcu danej tablicy.
INT_PTR Append(const CObArray& src);
Parametry
src
Źródło elementów do dołączenia do tablicy.
Wartość zwracana
Indeks pierwszego dołączonego elementu.
Uwagi
Tablice muszą być tego samego typu.
W razie potrzeby może przydzielić dodatkową pamięć, Append
aby uwzględnić elementy dołączone do tablicy.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::Append
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
INT_PTR Append(const CByteArray& src); |
CDWordArray |
INT_PTR Append(const CDWordArray& src); |
CPtrArray |
INT_PTR Append(const CPtrArray& src); |
CStringArray |
INT_PTR Append(const CStringArray& src); |
CUIntArray |
INT_PTR Append(const CUIntArray& src); |
CWordArray |
INT_PTR Append(const CWordArray& src); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray myArray1, myArray2;
// Add elements to the second array.
myArray2.Add(new CAge(21));
myArray2.Add(new CAge(42));
// Add elements to the first array and also append the second array.
myArray1.Add(new CAge(3));
myArray1.Append(myArray2);
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("myArray1: ") << &myArray1 << _T("\n");
afxDump << _T("myArray2: ") << &myArray2 << _T("\n");
#endif
CObArray::Copy
Wywołaj tę funkcję składową, aby zastąpić elementy danej tablicy elementami innej tablicy tego samego typu.
void Copy(const CObArray& src);
Parametry
src
Źródło elementów do skopiowania do tablicy.
Uwagi
Copy
nie zwalnia pamięci. W razie potrzeby może przydzielić dodatkową pamięć, Copy
aby pomieścić elementy skopiowane do tablicy.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::Copy
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void Copy(const CByteArray& src); |
CDWordArray |
void Copy(const CDWordArray& src); |
CPtrArray |
void Copy(const CPtrArray& src); |
CStringArray |
void Copy(const CStringArray& src); |
CUIntArray |
void Copy(const CUIntArray& src); |
CWordArray |
void Copy(const CWordArray& src); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray myArray1, myArray2;
// Add elements to the second array.
myArray2.Add(new CAge(21));
myArray2.Add(new CAge(42));
// Copy the elements from the second array to the first.
myArray1.Copy(myArray2);
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << "myArray1: " << &myArray1 << "\n";
afxDump << "myArray2: " << &myArray2 << "\n";
#endif
CObArray::CObArray
Tworzy pustą CObject
tablicę wskaźników.
CObArray();
Uwagi
Tablica zwiększa jeden element naraz.
W poniższej tabeli przedstawiono inne konstruktory podobne do CObArray::CObArray
.
Klasa | Konstruktor |
---|---|
CByteArray |
CByteArray(); |
CDWordArray |
CDWordArray(); |
CPtrArray |
CPtrArray(); |
CStringArray |
CStringArray(); |
CUIntArray |
CUIntArray(); |
CWordArray |
CWordArray(); |
Przykład
CObArray arr; //Array with default blocksize
CObArray* pArray = new CObArray; //Array on the heap with default blocksize
CObArray::ElementAt
Zwraca tymczasowe odwołanie do wskaźnika elementu w tablicy.
CObject*& ElementAt(INT_PTR nIndex);
Parametry
nIndex
Indeks liczby całkowitej, który jest większy lub równy 0 i mniejszy niż lub równy wartości zwracanej przez GetUpperBound
wartość .
Wartość zwracana
Odwołanie do CObject
wskaźnika.
Uwagi
Służy do implementowania operatora przypisania po lewej stronie dla tablic. Jest to zaawansowana funkcja, która powinna być używana tylko do implementowania specjalnych operatorów tablicy.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::ElementAt
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
BYTE& ElementAt(INT_PTR nIndex); |
CDWordArray |
DWORD& ElementAt(INT_PTR nIndex); |
CPtrArray |
void*& ElementAt(INT_PTR nIndex); |
CStringArray |
CString& ElementAt(INT_PTR nIndex); |
CUIntArray |
UINT& ElementAt(INT_PTR nIndex); |
CWordArray |
WORD& ElementAt(INT_PTR nIndex); |
Przykład
Zobacz przykład dla elementu CObArray::GetSize
.
CObArray::FreeExtra
Zwalnia wszelkie dodatkowe pamięci przydzielone podczas powiększania tablicy.
void FreeExtra();
Uwagi
Ta funkcja nie ma wpływu na rozmiar lub górną granicę tablicy.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::FreeExtra
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void FreeExtra(); |
CDWordArray |
void FreeExtra(); |
CPtrArray |
void FreeExtra(); |
CStringArray |
void FreeExtra(); |
CUIntArray |
void FreeExtra(); |
CWordArray |
void FreeExtra(); |
Przykład
Zobacz przykład dla elementu CObArray::GetData
.
CObArray::GetAt
Zwraca element tablicy w określonym indeksie.
CObject* GetAt(INT_PTR nIndex) const;
Parametry
nIndex
Indeks liczby całkowitej, który jest większy lub równy 0 i mniejszy niż lub równy wartości zwracanej przez GetUpperBound
wartość .
Wartość zwracana
Element CObject
wskaźnika obecnie w tym indeksie.
Uwagi
Uwaga
Przekazanie wartości ujemnej lub wartości większej niż wartość zwrócona przez GetUpperBound
spowoduje niepowodzenie asercji.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::GetAt
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
BYTE GetAt(INT_PTR nIndex) const; |
CDWordArray |
DWORD GetAt(INT_PTR nIndex) const; |
CPtrArray |
void* GetAt(INT_PTR nIndex) const; |
CStringArray |
const CString& GetAt(INT_PTR nIndex) const; |
CUIntArray |
UINT GetAt(INT_PTR nIndex) const; |
CWordArray |
WORD GetAt(INT_PTR nIndex) const; |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
ASSERT(*(CAge*) arr.GetAt(0) == CAge(21));
CObArray::GetCount
Zwraca liczbę elementów tablicy.
INT_PTR GetCount() const;
Wartość zwracana
Liczba elementów w tablicy.
Uwagi
Wywołaj tę metodę, aby pobrać liczbę elementów w tablicy. Ponieważ indeksy są oparte na zera, rozmiar jest 1 większy niż największy indeks.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::GetCount
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
INT_PTR GetCount() const; |
CDWordArray |
INT_PTR GetCount() const; |
CPtrArray |
INT_PTR GetCount() const; |
CStringArray |
INT_PTR GetCount() const; |
CUIntArray |
INT_PTR GetCount() const; |
CWordArray |
INT_PTR GetCount() const; |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray myArray;
// Add elements to the array.
for (int i = 0; i < 10; i++)
myArray.Add(new CAge(i));
// Add 100 to all the elements of the array.
for (int i = 0; i < myArray.GetCount(); i++)
{
CAge*& pAge = (CAge*&) myArray.ElementAt(i);
delete pAge;
pAge = new CAge(100 + i);
}
CObArray::GetData
Użyj tej funkcji składowej, aby uzyskać bezpośredni dostęp do elementów w tablicy.
const CObject** GetData() const;
CObject** GetData();
Wartość zwracana
Wskaźnik do tablicy CObject
wskaźników.
Uwagi
Jeśli żadne elementy nie są dostępne, GetData
zwraca NULL
wartość.
Chociaż bezpośredni dostęp do elementów tablicy może pomóc szybciej pracować, należy zachować ostrożność podczas wywoływania GetData
; wszelkie błędy, które są wykonywane bezpośrednio, wpływają na elementy tablicy.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::GetData
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray | const BYTE* GetData() const; BYTE* GetData(); |
CDWordArray | const DWORD* GetData() const; DWORD* GetData(); |
CPtrArray | const void** GetData() const; void** GetData(); |
CStringArray | const CString* GetData() const; CString* GetData(); |
CUIntArray | const UINT* GetData() const; UINT* GetData(); |
CWordArray | const WORD* GetData() const; WORD* GetData(); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray myArray;
// Allocate memory for at least 32 elements.
myArray.SetSize(32, 128);
// Add elements to the array.
CAge** ppAge = (CAge * *)myArray.GetData();
for (int i = 0; i < 32; i++, ppAge++)
* ppAge = new CAge(i);
// Only keep first 5 elements and free extra (unused) bytes.
for (int i = 5; i < myArray.GetCount(); i++)
{
delete myArray[i]; // free objects before resetting array size.
}
myArray.SetSize(5, 128);
myArray.FreeExtra(); // only frees pointers.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("myArray: ") << &myArray << _T("\n");
#endif
CObArray::GetSize
Zwraca rozmiar tablicy.
INT_PTR GetSize() const;
Uwagi
Ponieważ indeksy są oparte na zera, rozmiar jest 1 większy niż największy indeks.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::GetSize
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
INT_PTR GetSize() const; |
CDWordArray |
INT_PTR GetSize() const; |
CPtrArray |
INT_PTR GetSize() const; |
CStringArray |
INT_PTR GetSize() const; |
CUIntArray |
INT_PTR GetSize() const; |
CWordArray |
INT_PTR GetSize() const; |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray myArray;
// Add elements to the array.
for (int i = 0; i < 10; i++)
myArray.Add(new CAge(i));
// Add 100 to all the elements of the array.
for (int i = 0; i < myArray.GetSize(); i++)
{
CAge*& pAge = (CAge * &)myArray.ElementAt(i);
delete pAge;
pAge = new CAge(100 + i);
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("myArray: ") << &myArray << _T("\n");
#endif
CObArray::GetUpperBound
Zwraca bieżącą górną granicę tej tablicy.
INT_PTR GetUpperBound() const;
Wartość zwracana
Indeks górnej granicy (na podstawie zera).
Uwagi
Ponieważ indeksy tablic są oparte na zerach, ta funkcja zwraca wartość 1 mniejszą niż GetSize
.
Warunek GetUpperBound() = -1
wskazuje, że tablica nie zawiera żadnych elementów.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::GetUpperBound
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
INT_PTR GetUpperBound() const; |
CDWordArray |
INT_PTR GetUpperBound() const; |
CPtrArray |
INT_PTR GetUpperBound() const; |
CStringArray |
INT_PTR GetUpperBound() const; |
CUIntArray |
INT_PTR GetUpperBound() const; |
CWordArray |
INT_PTR GetUpperBound() const; |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
ASSERT(arr.GetUpperBound() == 1); // Largest index
CObArray::InsertAt
Wstawia element (lub wszystkie elementy w innej tablicy) w określonym indeksie.
void InsertAt(
INT_PTR nIndex,
CObject* newElement,
INT_PTR nCount = 1);
void InsertAt(
INT_PTR nStartIndex,
CObArray* pNewArray);
Parametry
nIndex
Indeks liczby całkowitej, który może być większy niż wartość zwracana przez GetUpperBound
wartość .
newElement
Wskaźnik CObject
, który ma zostać umieszczony w tej tablicy. Wartość newElement
jest dozwolona NULL
.
nCount
Liczba wstawień tego elementu (wartość domyślna to 1).
nStartIndex
Indeks liczby całkowitej, który może być większy niż wartość zwracana przez GetUpperBound
wartość .
pNewArray
Kolejna tablica zawierająca elementy do dodania do tej tablicy.
Uwagi
Pierwsza wersja InsertAt
wstawia jeden element (lub wiele kopii elementu) w określonym indeksie w tablicy. W procesie przesuwa się w górę (zwiększając indeks) istniejący element w tym indeksie i przesuwa w górę wszystkie elementy nad nim.
Druga wersja wstawia wszystkie elementy z innej CObArray
kolekcji, począwszy od nStartIndex
pozycji.
Natomiast SetAt
funkcja zastępuje jeden określony element tablicy i nie zmienia żadnych elementów.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::InsertAt
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void InsertAt(INT_PTR nIndex, BYTE newElement, int nCount = 1); throw(CMemoryException*); void InsertAt(INT_PTR nStartIndex, CByteArray* pNewArray); throw(CMemoryException*); |
CDWordArray |
void InsertAt(INT_PTR nIndex, DWORD newElement, int nCount = 1); throw(CMemoryException*); void InsertAt(INT_PTR nStartIndex, CDWordArray* pNewArray); throw(CMemoryException*); |
CPtrArray |
void InsertAt(INT_PTR nIndex, void* newElement, int nCount = 1); throw(CMemoryException*); void InsertAt(INT_PTR nStartIndex, CPtrArray* pNewArray); throw(CMemoryException*); |
CStringArray |
void InsertAt(INT_PTR nIndex, LPCTSTR newElement, int nCount = 1); throw(CMemoryException*); void InsertAt(INT_PTR nStartIndex, CStringArray* pNewArray); throw(CMemoryException*); |
CUIntArray |
void InsertAt(INT_PTR nIndex, UINT newElement, int nCount = 1); throw(CMemoryException*); void InsertAt(INT_PTR nStartIndex, CUIntArray* pNewArray); throw(CMemoryException*); |
CWordArray |
void InsertAt(INT_PTR nIndex, WORD newElement, int nCount = 1); throw(CMemoryException*); void InsertAt(INT_PTR nStartIndex, CWordArray* pNewArray); throw(CMemoryException*); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1 (will become 2).
arr.InsertAt(1, new CAge(30)); // New element 1
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("InsertAt example: ") << &arr << _T("\n");
#endif
Wyniki z tego programu są następujące:
InsertAt example: A CObArray with 3 elements
[0] = a CAge at $45C8 21
[1] = a CAge at $4646 30
[2] = a CAge at $4606 40
CObArray::IsEmpty
Określa, czy tablica jest pusta.
BOOL IsEmpty() const;
Wartość zwracana
Nonzero, jeśli tablica jest pusta; w przeciwnym razie 0.
CObArray::operator [ ]
Te operatory indeksu dolnego są wygodnym zamiennikiem SetAt
funkcji i GetAt
.
CObject*& operator[](int_ptr nindex);
CObject* operator[](int_ptr nindex) const;
Uwagi
Pierwszy operator, wywoływany dla tablic, które nie const
są , może być używany po prawej stronie (r-value) lub po lewej (l-value) instrukcji przypisania. Drugi, wywoływany dla const
tablic, może być używany tylko po prawej stronie.
Wersja debugowania biblioteki potwierdza, czy indeks dolny (po lewej lub prawej stronie instrukcji przypisania) jest poza granicami.
W poniższej tabeli przedstawiono inne operatory podobne do CObArray::operator []
.
Klasa | Operator |
---|---|
CByteArray |
BYTE& operator [](INT_PTR nindex); BYTE operator [](INT_PTR nindex) const; |
CDWordArray |
DWORD& operator [](INT_PTR nindex); DWORD operator [](INT_PTR nindex) const; |
CPtrArray |
void*& operator [](INT_PTR nindex); void* operator [](INT_PTR nindex) const; |
CStringArray |
CString& operator [](INT_PTR nindex); CString operator [](INT_PTR nindex) const; |
CUIntArray |
UINT& operator [](INT_PTR nindex); UINT operator [](INT_PTR nindex) const; |
CWordArray |
WORD& operator [](INT_PTR nindex); WORD operator [](INT_PTR nindex) const; |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
CAge* pa;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
pa = (CAge*)arr[0]; // Get element 0
ASSERT(*pa == CAge(21)); // Get element 0
arr[0] = new CAge(30); // Replace element 0
delete pa;
ASSERT(*(CAge*)arr[0] == CAge(30)); // Get new element 0
CObArray::RemoveAll
Usuwa wszystkie wskaźniki z tej tablicy, ale nie usuwa CObject
obiektów.
void RemoveAll();
Uwagi
Jeśli tablica jest już pusta, funkcja nadal działa.
Funkcja RemoveAll
zwalnia całą pamięć używaną do przechowywania wskaźników.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::RemoveAll
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void RemoveAll(); |
CDWordArray |
void RemoveAll(); |
CPtrArray |
void RemoveAll(); |
CStringArray |
void RemoveAll(); |
CUIntArray |
void RemoveAll(); |
CWordArray |
void RemoveAll(); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
CAge* pa1;
CAge* pa2;
arr.Add(pa1 = new CAge(21)); // Element 0
arr.Add(pa2 = new CAge(40)); // Element 1
ASSERT(arr.GetSize() == 2);
arr.RemoveAll(); // Pointers removed but objects not deleted.
ASSERT(arr.GetSize() == 0);
delete pa1;
delete pa2; // Cleans up memory.
CObArray::RemoveAt
Usuwa co najmniej jeden element rozpoczynający się od określonego indeksu w tablicy.
void RemoveAt(
INT_PTR nIndex,
INT_PTR nCount = 1);
Parametry
nIndex
Indeks liczby całkowitej, który jest większy lub równy 0 i mniejszy niż lub równy wartości zwracanej przez GetUpperBound
wartość .
nCount
Liczba elementów do usunięcia.
Uwagi
W procesie przesuwa wszystkie elementy powyżej usuniętych elementów. Spowoduje to obniżenie górnej granicy tablicy, ale nie zwalnia pamięci.
Jeśli spróbujesz usunąć więcej elementów niż znajdują się w tablicy powyżej punktu usuwania, wówczas asercyjna wersja debugowania biblioteki.
Funkcja RemoveAt
usuwa CObject
wskaźnik z tablicy, ale nie usuwa samego obiektu.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::RemoveAt
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1); |
CDWordArray |
void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1); |
CPtrArray | void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1); |
CStringArray |
void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1); |
CUIntArray |
void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1); |
CWordArray |
void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
CObject* pa;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
if ((pa = arr.GetAt(0)) != NULL)
{
arr.RemoveAt(0); // Element 1 moves to 0.
delete pa; // Delete the original element at 0.
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveAt example: ") << &arr << _T("\n");
#endif
Wyniki z tego programu są następujące:
RemoveAt example: A CObArray with 1 elements
[0] = a CAge at $4606 40
CObArray::SetAt
Ustawia element tablicy w określonym indeksie.
void SetAt(
INT_PTR nIndex,
CObject* newElement);
Parametry
nIndex
Indeks liczby całkowitej, który jest większy lub równy 0 i mniejszy niż lub równy wartości zwracanej przez GetUpperBound
wartość .
newElement
Wskaźnik obiektu do wstawienia w tej tablicy. Dozwolona NULL
jest wartość.
Uwagi
SetAt
nie spowoduje wzrostu tablicy. Użyj SetAtGrow
polecenia , jeśli chcesz, aby tablica automatycznie rosła.
Upewnij się, że wartość indeksu reprezentuje prawidłową pozycję w tablicy. Jeśli nie ma granic, oznacza to, że wersja debugowania biblioteki jest asercyjna.
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::SetAt
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void SetAt(INT_PTR nIndex, BYTE newElement); |
CDWordArray |
void SetAt(INT_PTR nIndex, DWORD newElement); |
CPtrArray |
void SetAt(INT_PTR nIndex, void* newElement); |
CStringArray |
void SetAt(INT_PTR nIndex, LPCTSTR newElement); |
CUIntArray |
void SetAt(INT_PTR nIndex, UINT newElement); |
CWordArray |
void SetAt(INT_PTR nIndex, WORD newElement); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
CObject* pa;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
if ((pa = arr.GetAt(0)) != NULL)
{
arr.SetAt(0, new CAge(30)); // Replace element 0.
delete pa; // Delete the original element at 0.
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("SetAt example: ") << &arr << _T("\n");
#endif
Wyniki z tego programu są następujące:
SetAt example: A CObArray with 2 elements
[0] = a CAge at $47E0 30
[1] = a CAge at $47A0 40
CObArray::SetAtGrow
Ustawia element tablicy w określonym indeksie.
void SetAtGrow(
INT_PTR nIndex,
CObject* newElement);
Parametry
nIndex
Indeks liczby całkowitej, który jest większy lub równy 0.
newElement
Wskaźnik obiektu, który ma zostać dodany do tej tablicy. Dozwolona NULL
jest wartość.
Uwagi
Tablica zwiększa się automatycznie, jeśli jest to konieczne (oznacza to, że górna granica jest dostosowana do nowego elementu).
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::SetAtGrow
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void SetAtGrow(INT_PTR nIndex, BYTE newElement); throw(CMemoryException*); |
CDWordArray |
void SetAtGrow(INT_PTR nIndex, DWORD newElement); throw(CMemoryException*); |
CPtrArray |
void SetAtGrow(INT_PTR nIndex, void* newElement); throw( CMemoryException*); |
CStringArray |
void SetAtGrow(INT_PTR nIndex, LPCTSTR newElement); throw(CMemoryException*); |
CUIntArray |
void SetAtGrow(INT_PTR nIndex, UINT newElement); throw(CMemoryException*); |
CWordArray |
void SetAtGrow(INT_PTR nIndex, WORD newElement); throw(CMemoryException*); |
Przykład
Zobacz CObList::CObList
listę klasy używanej CAge
we wszystkich przykładach kolekcji.
CObArray arr;
arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
arr.SetAtGrow(3, new CAge(65)); // Element 2 deliberately
// skipped.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("SetAtGrow example: ") << &arr << _T("\n");
#endif
Wyniki z tego programu są następujące:
SetAtGrow example: A CObArray with 4 elements
[0] = a CAge at $47C0 21
[1] = a CAge at $4800 40
[2] = NULL
[3] = a CAge at $4840 65
CObArray::SetSize
Określa rozmiar pustej lub istniejącej tablicy; przydziela pamięć w razie potrzeby.
void SetSize(
INT_PTR nNewSize,
INT_PTR nGrowBy = -1);
Parametry
nNewSize
Nowy rozmiar tablicy (liczba elementów). Musi być większe lub równe 0.
nGrowBy
Minimalna liczba miejsc elementów do przydzielenia, jeśli wymagany jest wzrost rozmiaru.
Uwagi
Jeśli nowy rozmiar jest mniejszy niż stary, tablica zostanie obcięta i zostanie zwolniona wszystkie nieużywane pamięci. W celu zwiększenia wydajności wywołaj metodę SetSize
, aby ustawić rozmiar tablicy przed jej użyciem. Zapobiega to konieczności reallokowania i kopiowania tablicy przy każdym dodaniu elementu.
Parametr nGrowBy
wpływa na wewnętrzną alokację pamięci, gdy tablica rośnie. Jego użycie nigdy nie ma wpływu na rozmiar tablicy zgłoszone przez GetSize
i GetUpperBound
.
Jeśli rozmiar tablicy wzrósł, wszystkie nowo przydzielone CObject *
wskaźniki są ustawione na NULL
wartość .
W poniższej tabeli przedstawiono inne funkcje składowe podobne do CObArray::SetSize
.
Klasa | Funkcja elementów członkowskich |
---|---|
CByteArray |
void SetSize(INT_PTR nNewSize, int nGrowBy = -1); throw(CMemoryException*); |
CDWordArray |
void SetSize(INT_PTR nNewSize, int nGrowBy = -1); throw(CMemoryException*); |
CPtrArray |
void SetSize(INT_PTR nNewSize, int nGrowBy = -1); throw(CMemoryException*); |
CStringArray |
void SetSize(INT_PTR nNewSize, int nGrowBy = -1); throw(CMemoryException*); |
CUIntArray |
void SetSize(INT_PTR nNewSize, int nGrowBy = -1); throw(CMemoryException*); |
CWordArray |
void SetSize(INT_PTR nNewSize, int nGrowBy = -1); throw(CMemoryException*); |
Przykład
Zobacz przykład dla elementu CObArray::GetData
.
Zobacz też
CObject
Klasa
Wykres hierarchii
CStringArray
Klasa
CPtrArray
Klasa
CByteArray
Klasa
CWordArray
Klasa
CDWordArray
Klasa