Поделиться через


Класс CObArray

Поддерживает массивы указателей CObject .

Синтаксис

class CObArray : public CObject

Участники

Открытые конструкторы

Имя Описание
CObArray::CObArray Создает пустой массив для CObject указателей.

Открытые методы

Имя Описание
CObArray::Add Добавляет элемент в конец массива. При необходимости размер массива увеличивается.
CObArray::Append Добавляет другой массив к массиву. При необходимости размер массива увеличивается.
CObArray::Copy Копирует другой массив в этот массив. При необходимости размер массива увеличивается.
CObArray::ElementAt Возвращает временную ссылку на указатель элемента в массиве.
CObArray::FreeExtra Освобождает всю неиспользуемую память сверх текущей верхней границы.
CObArray::GetAt Возвращает значение по указанному индексу.
CObArray::GetCount Возвращает количество элементов в массиве.
CObArray::GetData Разрешает доступ к элементам в массиве. Может иметь значение NULL.
CObArray::GetSize Возвращает количество элементов в массиве.
CObArray::GetUpperBound Возвращает самый большой допустимый индекс.
CObArray::InsertAt Вставляет элемент (или все элементы в другом массиве) по указанному индексу.
CObArray::IsEmpty Определяет, пуст ли массив.
CObArray::RemoveAll Удаляет все элементы из этого массива.
CObArray::RemoveAt Удаляет элемент по указанному индексу.
CObArray::SetAt Задает значение для указанного индекса. Размер массива не увеличивается.
CObArray::SetAtGrow Задает значение для указанного индекса. При необходимости размер массива увеличивается.
CObArray::SetSize Задает число элементов, которые будут храниться в этом массиве.

Открытые операторы

Имя Описание
CObArray::operator [] Получает или задает элемент с указанным индексом.

Замечания

Эти массивы объектов похожи на массивы C, но они могут динамически сжиматься и увеличиваться по мере необходимости.

Индексы массива всегда начинаются с позиции 0. Можно решить, следует ли исправить верхнюю границу или разрешить массиву расширяться при добавлении элементов после текущей границы. Память выделяется последовательно к верхней границе, даже если некоторые элементы находятся NULLв пределах.

В разделе Win32 размер CObArray объекта ограничен только доступной памятью.

Как и в массиве C, время доступа для CObArray индексированного элемента является константой и не зависит от размера массива.

CObArray использует макрос IMPLEMENT_SERIAL для поддержки сериализации и записи элементов в дамп. Если массив указателей CObject хранится в архиве либо с перегруженным оператором вставки, либо с Serialize функцией-членом, каждый CObject элемент в свою очередь сериализован вместе с его индексом массива.

Если требуется дампа отдельных CObject элементов в массиве, необходимо задать глубину CDumpContext объекта равным 1 или больше.

CObArray При удалении объекта или при удалении его элементов удаляются только CObject указатели, а не объекты, на которые они ссылаются.

Примечание.

Перед работой с массивом используйте функцию SetSize, чтобы определить его размер и выделить под него память. Если не использовать функцию SetSize, при добавлении элементов в массив он будет часто копироваться и для него снова и снова будет повторно выделяться память. Это может привести к ухудшению производительности и фрагментации памяти.

Производный класс массива аналогичен выводу списка. Дополнительные сведения о производных классах списка специального назначения см. в статье "Коллекции".

Примечание.

Если вы планируете сериализовать массив, необходимо использовать макрос IMPLEMENT_SERIAL в реализации производного класса.

Иерархия наследования

CObject

CObArray

Требования

Заголовок.afxcoll.h

CObArray::Add

Добавляет новый элемент в конец массива, увеличивая массив на 1.

INT_PTR Add(CObject* newElement);

Параметры

newElement
Указатель CObject , добавляемый в этот массив.

Возвращаемое значение

Индекс добавленного элемента.

Замечания

Если SetSize используется значение nGrowBy больше 1, то может быть выделена дополнительная память. Однако верхняя граница будет увеличиваться только на 1.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::Addна .

Класс Функция-член
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*);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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      

Результаты этой программы приведены следующим образом:

Add example: A CObArray with 2 elements
[0] = a CAge at $442A 21
[1] = a CAge at $4468 40

CObArray::Append

Вызовите эту функцию-член, чтобы добавить содержимое другого массива в конец данного массива.

INT_PTR Append(const CObArray& src);

Параметры

src
Источник элементов, добавляемых в массив.

Возвращаемое значение

Индекс первого добавленного элемента.

Замечания

Массивы должны иметь одинаковый тип.

При необходимости может выделить дополнительную память для размещения элементов, Append добавленных в массив.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::Appendна .

Класс Функция-член
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);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Вызовите эту функцию-член, чтобы перезаписать элементы заданного массива с элементами другого массива того же типа.

void Copy(const CObArray& src);

Параметры

src
Источник элементов, копируемых в массив.

Замечания

Copy не освобождает память. При необходимости может выделить дополнительную память для размещения элементов, Copy скопированных в массив.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::Copyна .

Класс Функция-член
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);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Создает пустой CObject массив указателя.

CObArray();

Замечания

Массив увеличивает один элемент за раз.

В следующей таблице показаны другие конструкторы, которые похожи CObArray::CObArrayна .

Класс Конструктор
CByteArray CByteArray();
CDWordArray CDWordArray();
CPtrArray CPtrArray();
CStringArray CStringArray();
CUIntArray CUIntArray();
CWordArray CWordArray();

Пример

CObArray arr; //Array with default blocksize
CObArray* pArray = new CObArray; //Array on the heap with default blocksize      

CObArray::ElementAt

Возвращает временную ссылку на указатель элемента в массиве.

CObject*& ElementAt(INT_PTR nIndex);

Параметры

nIndex
Целочисленный индекс, который больше или равен 0 и меньше или равен значению, возвращаемого GetUpperBound.

Возвращаемое значение

Ссылка на CObject указатель.

Замечания

Он используется для реализации оператора назначения слева для массивов. Это расширенная функция, которая должна использоваться только для реализации специальных операторов массива.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::ElementAtна .

Класс Функция-член
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);

Пример

Пример см. в примере CObArray::GetSize.

CObArray::FreeExtra

Освобождает дополнительную память, выделенную во время роста массива.

void FreeExtra();

Замечания

Эта функция не влияет на размер или верхнюю границу массива.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::FreeExtraна .

Класс Функция-член
CByteArray void FreeExtra();
CDWordArray void FreeExtra();
CPtrArray void FreeExtra();
CStringArray void FreeExtra();
CUIntArray void FreeExtra();
CWordArray void FreeExtra();

Пример

Пример см. в примере CObArray::GetData.

CObArray::GetAt

Возвращает элемент массива по указанному индексу.

CObject* GetAt(INT_PTR nIndex) const;

Параметры

nIndex
Целочисленный индекс, который больше или равен 0 и меньше или равен значению, возвращаемого GetUpperBound.

Возвращаемое значение

Элемент CObject указателя в данный момент в этом индексе.

Замечания

Примечание.

Передача отрицательного значения или значения, превышающего возвращаемое GetUpperBound значением, приведет к сбою утверждения.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::GetAtна .

Класс Функция-член
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;

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Возвращает количество элементов массива.

INT_PTR GetCount() const;

Возвращаемое значение

Количество элементов в массиве.

Замечания

Вызовите этот метод, чтобы получить количество элементов в массиве. Так как индексы основаны на нулях, размер составляет 1 больше, чем самый большой индекс.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::GetCountна .

Класс Функция-член
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;

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Используйте эту функцию-член, чтобы получить прямой доступ к элементам в массиве.

const CObject** GetData() const;

CObject** GetData();

Возвращаемое значение

Указатель на массив указателей CObject .

Замечания

Если элементы недоступны, GetData возвращает NULL значение.

Хотя прямой доступ к элементам массива может помочь вам быстрее работать, используйте осторожность при вызове GetData; любые ошибки, которые вы вносите непосредственно на элементы массива.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::GetDataна .

Класс Функция-член
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();

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Возвращает размер массива.

INT_PTR GetSize() const;

Замечания

Так как индексы основаны на нулях, размер составляет 1 больше, чем самый большой индекс.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::GetSizeна .

Класс Функция-член
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;

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Возвращает текущую верхнюю границу этого массива.

INT_PTR GetUpperBound() const;

Возвращаемое значение

Индекс верхней границы (от нуля).

Замечания

Так как индексы массива основаны на нулях, эта функция возвращает значение 1 меньше GetSize.

Условие GetUpperBound() = -1 указывает, что массив не содержит элементов.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::GetUpperBoundна .

Класс Функция-член
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;

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

CObArray arr;

arr.Add(new CAge(21)); // Element 0
arr.Add(new CAge(40)); // Element 1
ASSERT(arr.GetUpperBound() == 1); // Largest index      

CObArray::InsertAt

Вставляет элемент (или все элементы в другом массиве) по указанному индексу.

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

void InsertAt(
    INT_PTR nStartIndex,
    CObArray* pNewArray);

Параметры

nIndex
Целочисленный индекс, который может быть больше значения, возвращаемого GetUpperBound.

newElement
Указатель CObject , который нужно поместить в этот массив. Допускается значение newElementNULL .

nCount
Количество вставок этого элемента (по умолчанию — 1).

nStartIndex
Целочисленный индекс, который может быть больше значения, возвращаемого GetUpperBound.

pNewArray
Другой массив, содержащий элементы, добавляемые в этот массив.

Замечания

Первая версия InsertAt вставки одного элемента (или нескольких копий элемента) по указанному индексу в массиве. В процессе он сдвигается (путем увеличения индекса) существующего элемента в этом индексе, и он сдвигает все элементы над ним.

Вторая версия вставляет все элементы из другой CObArray коллекции, начиная с nStartIndex позиции.

Функция SetAt , напротив, заменяет один указанный элемент массива и не сдвигает элементы.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::InsertAtна .

Класс Функция-член
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*);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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      

Результаты этой программы приведены следующим образом:

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

Определяет, пуст ли массив.

BOOL IsEmpty() const;

Возвращаемое значение

Ненулевое значение, если массив пуст; в противном случае — 0.

CObArray::operator [ ]

Эти операторы подстрока являются удобной заменой для SetAt функций и GetAt функций.

CObject*& operator[](int_ptr nindex);
CObject* operator[](int_ptr nindex) const;

Замечания

Первый оператор, который вызывается для массивов, которые не constявляются, можно использовать в правом (r-value) или левом (l-value) инструкции назначения. Второй, вызываемой для const массивов, может использоваться только справа.

Отладочная версия библиотеки утверждает, что подстрок (слева или справа от оператора назначения) выходит за рамки.

В следующей таблице показаны другие операторы, которые похожи CObArray::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;

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Удаляет все указатели из этого массива, но не удаляет CObject объекты.

void RemoveAll();

Замечания

Если массив уже пуст, функция по-прежнему работает.

Функция RemoveAll освобождает всю память, используемую для хранения указателей.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::RemoveAllна .

Класс Функция-член
CByteArray void RemoveAll();
CDWordArray void RemoveAll();
CPtrArray void RemoveAll();
CStringArray void RemoveAll();
CUIntArray void RemoveAll();
CWordArray void RemoveAll();

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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

Удаляет один или несколько элементов, начиная с указанного индекса в массиве.

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

Параметры

nIndex
Целочисленный индекс, который больше или равен 0 и меньше или равен значению, возвращаемого GetUpperBound.

nCount
Число удаляемых элементов.

Замечания

В процессе он сдвигает все элементы над удаленными элементами. Он уменьшает верхнюю границу массива, но не освобождает память.

Если вы пытаетесь удалить больше элементов, чем они содержатся в массиве выше точки удаления, то версия отладки библиотеки утверждает.

Функция RemoveAt удаляет CObject указатель из массива, но не удаляет сам объект.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::RemoveAtна .

Класс Функция-член
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);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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      

Результаты этой программы приведены следующим образом:

RemoveAt example: A CObArray with 1 elements
[0] = a CAge at $4606 40

CObArray::SetAt

Задает элемент массива по указанному индексу.

void SetAt(
    INT_PTR nIndex,
    CObject* newElement);

Параметры

nIndex
Целочисленный индекс, который больше или равен 0 и меньше или равен значению, возвращаемого GetUpperBound.

newElement
Указатель объекта, который нужно вставить в этот массив. Допускается NULL значение.

Замечания

SetAt Не приведет к росту массива. Используйте SetAtGrow , если вы хотите, чтобы массив рос автоматически.

Убедитесь, что значение индекса представляет допустимую позицию в массиве. Если она не ограничена, то утверждается отладочная версия библиотеки.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::SetAtна .

Класс Функция-член
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);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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      

Результаты этой программы приведены следующим образом:

SetAt example: A CObArray with 2 elements
[0] = a CAge at $47E0 30
[1] = a CAge at $47A0 40

CObArray::SetAtGrow

Задает элемент массива по указанному индексу.

void SetAtGrow(
    INT_PTR nIndex,
    CObject* newElement);

Параметры

nIndex
Целый индекс, превышающий или равный 0.

newElement
Указатель объекта, добавляемый в этот массив. Допускается NULL значение.

Замечания

При необходимости массив автоматически увеличивается (т. е. верхняя граница корректируется для размещения нового элемента).

В следующей таблице показаны другие функции-члены, которые похожи CObArray::SetAtGrowна .

Класс Функция-член
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*);

Пример

См CObList::CObList . описание класса, используемого CAge во всех примерах коллекции.

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      

Результаты этой программы приведены следующим образом:

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

Устанавливает размер пустого или существующего массива; при необходимости выделяет память.

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

Параметры

nNewSize
Новый размер массива (количество элементов). Должно быть больше или равно 0.

nGrowBy
Минимальное количество слотов элементов, выделяемых при необходимости увеличения размера.

Замечания

Если новый размер меньше старого размера, массив усечен и освобождается неиспользуемая память. Для повышения эффективности вызовите SetSize настройку размера массива перед его использованием. Это предотвращает необходимость перераспределять и копировать массив при каждом добавлении элемента.

Параметр nGrowBy влияет на выделение внутренней памяти во время роста массива. Его использование никогда не влияет на размер массива, как сообщается GetSize и GetUpperBound.

Если размер массива вырос, для всех вновь выделенных CObject * указателей задано значение NULL.

В следующей таблице показаны другие функции-члены, которые похожи CObArray::SetSizeна .

Класс Функция-член
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*);

Пример

Пример см. в примере CObArray::GetData.

См. также

CObject Класса
Диаграмма иерархии
CStringArray Класса
CPtrArray Класса
CByteArray Класса
CWordArray Класса
CDWordArray Класса