CObArray Klasa

Obsługuje tablice CObject wskaźników.

Składnia

class CObArray : public CObject

Członkowie

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.

CObArrayIMPLEMENT_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

CObject

CObArray

Wymagania

Nagłówka: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 GetUpperBoundwartość .

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 GetUpperBoundwartość .

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 GetUpperBoundwartość .

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 GetUpperBoundwartość .

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 constsą , 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 GetUpperBoundwartość .

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 GetUpperBoundwartość .

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 NULLwartość .

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