Класс CObList

Поддерживает упорядоченные списки неуникальных CObject указателей, доступные последовательно или по значению указателя.

Синтаксис

class CObList : public CObject

Участники

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

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

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

Имя Описание
CObList::AddHead Добавляет элемент (или все элементы в другом списке) в голову списка (делает новую голову).
CObList::AddTail Добавляет элемент (или все элементы в другом списке) в хвост списка (делает новый хвост).
CObList::Find Возвращает позицию элемента, указанного значением указателя.
CObList::FindIndex Возвращает позицию элемента, заданного отсчитываемым от нуля индексом.
CObList::GetAt Возвращает элемент в заданной позиции.
CObList::GetCount Возвращает количество элементов в этом списке.
CObList::GetHead Возвращает головной элемент списка (не может быть пустым).
CObList::GetHeadPosition Возвращает позицию головного элемента списка.
CObList::GetNext Возвращает следующий элемент для итерации.
CObList::GetPrev Возвращает предыдущий элемент для итерации.
CObList::GetSize Возвращает количество элементов в этом списке.
CObList::GetTail Возвращает хвостовой элемент списка (не может быть пустым).
CObList::GetTailPosition Возвращает положение хвостового элемента списка.
CObList::InsertAfter Вставляет новый элемент после заданной позиции.
CObList::InsertBefore Вставляет новый элемент перед заданной позицией.
CObList::IsEmpty Проверяет условие пустого списка (без элементов).
CObList::RemoveAll Удаляет все элементы из этого списка.
CObList::RemoveAt Удаляет элемент из этого списка, указанный позицией.
CObList::RemoveHead Удаляет элемент из головы списка.
CObList::RemoveTail Удаляет элемент из хвоста списка.
CObList::SetAt Задает элемент в заданной позиции.

Замечания

CObList списки ведут себя как вдвойне связанные списки.

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

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

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

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

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

Вы можете наследить собственные классы.CObList Новый класс списка, предназначенный для хранения указателей на объекты, производные от CObjectобъектов, добавляет новые члены данных и новые функции-члены. Обратите внимание, что результирующий список не является строго типизированным, так как он позволяет вставлять любой CObject указатель.

Примечание.

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

Дополнительные сведения об использовании CObListсм. в статье "Коллекции".

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

CObject

CObList

Требования

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

CObList::AddHead

Добавляет новый элемент или список элементов в голову этого списка.

POSITION AddHead(CObject* newElement);
void AddHead(CObList* pNewList);

Параметры

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

pNewList
Указатель на другой CObList список. Элементы в pNewList этом списке будут добавлены.

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

Первая версия возвращает POSITION значение только что вставленного элемента.

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

Класс Функция-член
CPtrList POSITION AddHead( void * newElement );

void AddHead( CPtrList * pNewList );
CStringList POSITION AddHead(const CString& newElement );

POSITION AddHead(LPCTSTR newElement );

void AddHead(CStringList * pNewList );

Замечания

Список может быть пустым перед операцией.

Пример

См CObList::CObList . описание CAge класса.

CObList list;
list.AddHead(new CAge(21)); // 21 is now at head.
list.AddHead(new CAge(40)); // 40 replaces 21 at head.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("AddHead example: ") << &list << _T("\n");
#endif      

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

AddHead example: A CObList with 2 elements
a CAge at $44A8 40
a CAge at $442A 21

CObList::AddTail

Добавляет новый элемент или список элементов в хвост этого списка.

POSITION AddTail(CObject* newElement);
void AddTail(CObList* pNewList);

Параметры

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

pNewList
Указатель на другой CObList список. Элементы в pNewList этом списке будут добавлены.

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

Первая версия возвращает POSITION значение только что вставленного элемента.

Замечания

Список может быть пустым перед операцией.

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

Класс Функция-член
CPtrList POSITION AddTail( void * newElement );

void AddTail( CPtrList * pNewList );
CStringList POSITION AddTail( const CString& newElement );

POSITION AddTail( LPCTSTR newElement );

void AddTail( CStringList * pNewList );

Пример

См CObList::CObList . описание CAge класса.

CObList list;
list.AddTail(new CAge(21));
list.AddTail(new CAge(40)); // List now contains (21, 40).
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("AddTail example: ") << &list << _T("\n");
#endif      

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

AddTail example: A CObList with 2 elements
a CAge at $444A 21
a CAge at $4526 40

CObList::CObList

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

CObList(INT_PTR nBlockSize = 10);

Параметры

nBlockSize
Степень детализации выделения памяти для расширения списка.

Замечания

По мере роста списка память выделяется в единицах записей nBlockSize . Если выделение памяти завершается ошибкой, CMemoryException создается исключение.

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

Класс Функция-член
CPtrList CPtrList( INT_PTR nBlockSize = 10 );
CStringList CStringList( INT_PTR nBlockSize = 10 );

Пример

Ниже приведен список производного классаCAge, используемого CObjectво всех примерах коллекции:

// Simple CObject-derived class for CObList and other examples
class CAge : public CObject
{
   DECLARE_SERIAL(CAge)
private:
   int   m_years;
public:
   CAge() { m_years = 0; }
   CAge(int age) { m_years = age; }
   CAge(const CAge& a) { m_years = a.m_years; } // Copy constructor
   void Serialize(CArchive& ar);
   void AssertValid() const;
   const CAge& operator=(const CAge& a)
   {
      m_years = a.m_years; return *this;
   }
   BOOL operator==(CAge a)
   {
      return m_years == a.m_years;
   }
#ifdef _DEBUG
   void Dump(CDumpContext& dc) const
   {
      CObject::Dump(dc);
      dc << m_years;
   }
#endif
};

Ниже приведен пример использования конструктора CObList :

CObList list(20);  // List on the stack with blocksize = 20.

CObList* plist = new CObList; // List on the heap with default 
                              // blocksize.         

CObList::Find

Выполняет поиск списка последовательно, чтобы найти первый CObject указатель, соответствующий указанному CObject указателю.

POSITION Find(
    CObject* searchValue,
    POSITION startAfter = NULL) const;

Параметры

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

startAfter
Начальная позиция для поиска.

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

POSITION Значение, которое можно использовать для итерации или извлечения указателя объекта; NULL если объект не найден.

Замечания

Обратите внимание, что значения указателя сравниваются, а не содержимое объектов.

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

Класс Функция-член
CPtrList POSITION Find( void *searchValue , POSITION startAfter = NULL ) const;
CStringList POSITION Find( LPCTSTR searchValue , POSITION startAfter = NULL ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;
CAge* pa1;
CAge* pa2;
POSITION pos;
list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40));    // List now contains (40, 21).
if ((pos = list.Find(pa1)) != NULL) // Hunt for pa1
{                                  // starting at head by default.
   ASSERT(*(CAge*)list.GetAt(pos) == CAge(21));
}

CObList::FindIndex

Использует значение nIndex в качестве индекса в списке.

POSITION FindIndex(INT_PTR nIndex) const;

Параметры

nIndex
Отсчитываемый от нуля индекс элемента списка.

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

POSITION Значение, которое можно использовать для итерации или извлечения указателя объекта; NULL если nIndex слишком большой. (Платформа создает утверждение, если nIndex отрицательно.)

Замечания

Он запускает последовательное сканирование из головы списка, остановившись на n-мэлементе.

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

Класс Функция-член
CPtrList POSITION FindIndex( INT_PTR nIndex ) const;
CStringList POSITION FindIndex( INT_PTR nIndex ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.FindIndex(0)) != NULL)
{
   ASSERT(*(CAge*)list.GetAt(pos) == CAge(40));
}

CObList::GetAt

Переменная типа POSITION является ключом для списка.

CObject*& GetAt(POSITION position);
const CObject*& GetAt(POSITION position) const;

Параметры

position
Значение POSITION , возвращаемое предыдущим GetHeadPosition вызовом или Find вызовом функции-члена.

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

См. описание возвращаемого значения для GetHead.

Замечания

Это не то же самое, что и индекс, и вы не можете работать с POSITION значением самостоятельно. GetAt извлекает указатель, CObject связанный с заданной позицией.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

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

Класс Функция-член
CPtrList const void*& GetAt( POSITION position ) const;

void*& GetAt( POSITION position );
CStringList const CString& GetAt( POSITION position ) const;

CString& GetAt( POSITION position );

Пример

Пример см. в примере FindIndex.

CObList::GetCount

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

INT_PTR GetCount() const;

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

Целочисленное значение, содержащее число элементов.

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

Класс Функция-член
CPtrList INT_PTR GetCount( ) const;
CStringList INT_PTR GetCount( ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
ASSERT(list.GetCount() == 2);

CObList::GetHead

CObject Возвращает указатель, представляющий головной элемент этого списка.

CObject*& GetHead();
const CObject*& GetHead() const;

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

Если доступ к списку осуществляется с помощью указателя на объект const CObList, возвращает GetHeadCObject указатель. Это позволяет использовать функцию только в правой части инструкции назначения и таким образом защищает список от изменения.

Если доступ к списку осуществляется напрямую или через указатель на объект CObList, возвращает GetHead ссылку на CObject указатель. Это позволяет использовать функцию с любой стороны инструкции назначения и таким образом позволяет изменять записи списка.

Замечания

Перед вызовом GetHeadнеобходимо убедиться, что список не пуст. Если список пуст, то утверждается отладочная версия библиотеки классов Microsoft Foundation. Используется IsEmpty для проверки того, содержит ли список элементы.

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

Класс Функция-член
CPtrList const void*& GetHead( ) const; void*& GetHead( );
CStringList const CString& GetHead( ) const; CString& GetHead( );

Пример

См CObList::CObList . описание CAge класса.

В следующем примере показано использование GetHead в левой части инструкции назначения.

const CObList* cplist;

CObList* plist = new CObList;
CAge* page1 = new CAge(21);
CAge* page2 = new CAge(30);
CAge* page3 = new CAge(40);
plist->AddHead(page1);
plist->AddHead(page2);  // List now contains (30, 21).
// The following statement REPLACES the head element.
plist->GetHead() = page3; // List now contains (40, 21).
ASSERT(*(CAge*)plist->GetHead() == CAge(40));
cplist = plist;  // cplist is a pointer to a const list.
// cplist->GetHead() = page3; // Error: can't assign a pointer to a const list
ASSERT(*(CAge*)plist->GetHead() == CAge(40)); // OK

delete page1;
delete page2;
delete page3;
delete plist; // Cleans up memory.      

CObList::GetHeadPosition

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

POSITION GetHeadPosition() const;

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

Значение POSITION , которое можно использовать для итерации или извлечения указателя объекта; NULL если список пуст.

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

Класс Функция-член
CPtrList POSITION GetHeadPosition( ) const;
CStringList POSITION GetHeadPosition( ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.GetHeadPosition()) != NULL)
{
   ASSERT(*(CAge*)list.GetAt(pos) == CAge(40));
}

CObList::GetNext

Возвращает элемент списка, определенный rPosition, а затем задает rPositionPOSITION значение следующей записи в списке.

CObject*& GetNext(POSITION& rPosition);
const CObject* GetNext(POSITION& rPosition) const;

Параметры

rPosition
Ссылка на POSITION значение, GetHeadPositionвозвращаемое предыдущим GetNextили другим вызовом функции-члена.

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

См. описание возвращаемого значения для GetHead.

Замечания

Вы можете использовать GetNext в цикле итерации пересылки, если установить начальную позицию с вызовом GetHeadPosition или Find.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

Если извлеченный элемент является последним в списке, то для нового значения rPosition задано значение NULL.

Во время итерации можно удалить элемент. Пример см. в примере RemoveAt.

Примечание.

По состоянию на MFC 8.0 версия const этого метода изменилась, чтобы вернуться const CObject* вместо const CObject*&. Это изменение было внесено для обеспечения соответствия компилятора стандарту C++.

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

Класс Функция-член
CPtrList void*& GetNext( POSITION& rPosition );

const void* GetNext( POSITION& rPosition ) const;
CStringList CString& GetNext( POSITION& rPosition );

const CString& GetNext( POSITION& rPosition ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos;
list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
// Iterate through the list in head-to-tail order.
#ifdef _DEBUG
for (pos = list.GetHeadPosition(); pos != NULL;)
{
   afxDump << list.GetNext(pos) << _T("\n");
}
#endif      

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

a CAge at $479C 40
a CAge at $46C0 21

CObList::GetPrev

Возвращает элемент списка, определенный rPosition, а затем задает rPositionPOSITION значение предыдущей записи в списке.

CObject*& GetPrev(POSITION& rPosition);
const CObject* GetPrev(POSITION& rPosition) const;

Параметры

rPosition
Ссылка на POSITION значение, возвращаемое предыдущим GetPrev или другим вызовом функции-члена.

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

См. описание возвращаемого значения для GetHead.

Замечания

Можно использовать GetPrev в цикле обратной итерации, если установить начальную позицию с вызовом GetTailPosition или Find.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

Если извлеченный элемент является первым в списке, то для нового значения rPosition задано значение NULL.

Примечание.

По состоянию на MFC 8.0 версия const этого метода изменилась, чтобы вернуться const CObject* вместо const CObject*&. Это изменение было внесено для обеспечения соответствия компилятора стандарту C++.

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

Класс Функция-член
CPtrList void*& GetPrev( POSITION& rPosition );

const void* GetPrev( POSITION& rPosition ) const;
CStringList CString& GetPrev( POSITION& rPosition );

const CString& GetPrev( POSITION& rPosition ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
// Iterate through the list in tail-to-head order.
for (pos = list.GetTailPosition(); pos != NULL;)
{
#ifdef _DEBUG
   afxDump << list.GetPrev(pos) << _T("\n");
#endif
}

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

a CAge at $421C 21
a CAge at $421C 40

CObList::GetSize

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

INT_PTR GetSize() const;

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

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

Замечания

Вызовите этот метод, чтобы получить количество элементов в списке.

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

Класс Функция-член
CPtrList INT_PTR GetSize( ) const;
CStringList INT_PTR GetSize( ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
ASSERT(list.GetSize() == 2);

CObList::GetTail

CObject Возвращает указатель, представляющий хвостовой элемент этого списка.

CObject*& GetTail();
const CObject*& GetTail() const;

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

См. описание возвращаемого значения для GetHead.

Замечания

Перед вызовом GetTailнеобходимо убедиться, что список не пуст. Если список пуст, то утверждается отладочная версия библиотеки классов Microsoft Foundation. Используется IsEmpty для проверки того, содержит ли список элементы.

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

Класс Функция-член
CPtrList const void*& GetTail( ) const; void*& GetTail( );
CStringList const CString& GetTail( ) const; CString& GetTail( );

Пример

См CObList::CObList . описание CAge класса.

CObList list;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
ASSERT(*(CAge*)list.GetTail() == CAge(21));

CObList::GetTailPosition

Получает позицию хвостового элемента этого списка; NULL Значение , если список пуст.

POSITION GetTailPosition() const;

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

Значение POSITION , которое можно использовать для итерации или извлечения указателя объекта; NULL если список пуст.

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

Класс Функция-член
CPtrList POSITION GetTailPosition( ) const;
CStringList POSITION GetTailPosition( ) const;

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.GetTailPosition()) != NULL)
{
    ASSERT(*(CAge*) list.GetAt(pos) == CAge(21));
}     

CObList::InsertAfter

Добавляет элемент в этот список после элемента в указанной позиции.

POSITION InsertAfter(
    POSITION position,
    CObject* newElement);

Параметры

position
ЗначениеPOSITION, GetPrevвозвращаемое предыдущим GetNextвызовом функции или Find функцией-членом.

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

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

Класс Функция-член
CPtrList POSITION InsertAfter( POSITION position , void * newElement );
CStringList POSITION InsertAfter( POSITION position , const CString& newElement );

POSITION InsertAfter( POSITION position , LPCTSTR newElement );

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

Значение POSITION , которое совпадает с параметром position .

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos1, pos2;
list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos1 = list.GetHeadPosition()) != NULL)
{
    pos2 = list.InsertAfter(pos1, new CAge(65));
}
#ifdef _DEBUG
   afxDump.SetDepth(1);
   afxDump << _T("InsertAfter example: ") << &list << _T("\n");
#endif

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

InsertAfter example: A CObList with 3 elements
a CAge at $4A44 40
a CAge at $4A64 65
a CAge at $4968 21

CObList::InsertBefore

Добавляет элемент в список перед элементом в указанной позиции.

POSITION InsertBefore(
    POSITION position,
    CObject* newElement);

Параметры

position
ЗначениеPOSITION, GetPrevвозвращаемое предыдущим GetNextвызовом функции или Find функцией-членом.

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

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

Значение POSITION , которое можно использовать для итерации или извлечения указателя объекта; NULL если список пуст.

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

Класс Функция-член
CPtrList POSITION InsertBefore( POSITION position , void * newElement );
CStringList POSITION InsertBefore( POSITION position , const CString& newElement );

POSITION InsertBefore( POSITION position , LPCTSTR newElement );

Пример

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos1, pos2;
list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos1 = list.GetTailPosition()) != NULL)
{
    pos2 = list.InsertBefore(pos1, new CAge(65));
}
#ifdef _DEBUG
   afxDump.SetDepth(1);
   afxDump << _T("InsertBefore example: ") << &list << _T("\n");
#endif      

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

InsertBefore example: A CObList with 3 elements
a CAge at $4AE2 40
a CAge at $4B02 65
a CAge at $49E6 21

CObList::IsEmpty

Указывает, содержит ли этот список никакие элементы.

BOOL IsEmpty() const;

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

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

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

Класс Функция-член
CPtrList BOOL IsEmpty( ) const;
CStringList BOOL IsEmpty( ) const;

Пример

Пример см. в примере RemoveAll.

CObList::RemoveAll

Удаляет все элементы из этого списка и освобождает связанную CObList память.

void RemoveAll();

Замечания

Ошибка не возникает, если список уже пуст.

При удалении элементов из CObListсписка удаляются указатели объектов. Вы несете ответственность за удаление самих объектов.

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

Класс Функция-член
CPtrList void RemoveAll( );
CStringList void RemoveAll( );

Пример

См CObList::CObList . описание CAge класса.

CObList list;
CAge* pa1;
CAge* pa2;
ASSERT(list.IsEmpty()); // Yes it is.
list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40)); // List now contains (40, 21).
ASSERT(!list.IsEmpty()); // No it isn't.
list.RemoveAll(); // CAges aren't destroyed.
ASSERT(list.IsEmpty()); // Yes it is.
delete pa1;     // Now delete the CAge objects.
delete pa2;

CObList::RemoveAt

Удаляет указанный элемент из этого списка.

void RemoveAt(POSITION position);

Параметры

position
Позиция элемента, который нужно удалить из списка.

Замечания

При удалении элемента из CObListсписка удалите указатель объекта. Вы несете ответственность за удаление самих объектов.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

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

Класс Функция-член
CPtrList void RemoveAt( POSITION position );
CStringList void RemoveAt( POSITION position );

Пример

Будьте осторожны при удалении элемента во время итерации списка. В следующем примере показан метод удаления, который гарантирует допустимое POSITION значение GetNext.

См CObList::CObList . описание CAge класса.

CObList list;
POSITION pos1, pos2;
CObject* pa;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40));
list.AddHead(new CAge(65)); // List now contains (65 40, 21).
for (pos1 = list.GetHeadPosition(); (pos2 = pos1) != NULL;)
{
   if (*(CAge*)list.GetNext(pos1) == CAge(40))
   {
      pa = list.GetAt(pos2); // Save the old pointer for
                             //deletion.
      list.RemoveAt(pos2);
      delete pa; // Deletion avoids memory leak.
   }
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveAt example: ") << &list << _T("\n");
#endif      

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

RemoveAt example: A CObList with 2 elements

a CAge at $4C1E 65

a CAge at $4B22 21

CObList::RemoveHead

Удаляет элемент из головы списка и возвращает указатель на него.

CObject* RemoveHead();

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

Указатель CObject ранее в начале списка.

Замечания

Перед вызовом RemoveHeadнеобходимо убедиться, что список не пуст. Если список пуст, то утверждается отладочная версия библиотеки классов Microsoft Foundation. Используется IsEmpty для проверки того, содержит ли список элементы.

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

Класс Функция-член
CPtrList void* RemoveHead( );
CStringList CString RemoveHead( );

Пример

См CObList::CObList . описание CAge класса.

CObList list;
CAge* pa1;
CAge* pa2;

list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40)); // List now contains (40, 21).
ASSERT(*(CAge*)list.RemoveHead() == CAge(40));  // Old head
ASSERT(*(CAge*)list.GetHead() == CAge(21));  // New head
delete pa1;
delete pa2;

CObList::RemoveTail

Удаляет элемент из хвоста списка и возвращает указатель на него.

CObject* RemoveTail();

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

Указатель на объект, который был в хвосте списка.

Замечания

Перед вызовом RemoveTailнеобходимо убедиться, что список не пуст. Если список пуст, то утверждается отладочная версия библиотеки классов Microsoft Foundation. Используется IsEmpty для проверки того, содержит ли список элементы.

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

Класс Функция-член
CPtrList void* RemoveTail( );
CStringList CString RemoveTail( );

Пример

См CObList::CObList . описание CAge класса.

CObList list;
CAge* pa1;
CAge* pa2;

list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40)); // List now contains (40, 21).
ASSERT(*(CAge*)list.RemoveTail() == CAge(21));  // Old tail
ASSERT(*(CAge*)list.GetTail() == CAge(40));  // New tail
delete pa1;
delete pa2; // Clean up memory.      

CObList::SetAt

Задает элемент в заданной позиции.

void SetAt(
    POSITION pos,
    CObject* newElement);

Параметры

pos
Элемент POSITION , который нужно задать.

newElement
Указатель CObject , который необходимо записать в список.

Замечания

Переменная типа POSITION является ключом для списка. Это не то же самое, что и индекс, и вы не можете работать с POSITION значением самостоятельно. SetAt записывает CObject указатель на указанную позицию в списке.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

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

Класс Функция-член
CPtrList void SetAt( POSITION pos , const CString& newElement );
CStringList void SetAt( POSITION pos , LPCTSTR newElement );

Пример

См CObList::CObList . описание CAge класса.

CObList list;
CObject* pa;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.GetTailPosition()) != NULL)
{
   pa = list.GetAt(pos); // Save the old pointer for 
                         //deletion.
   list.SetAt(pos, new CAge(65));  // Replace the tail 
                                     //element.
   delete pa;  // Deletion avoids memory leak.
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("SetAt example: ") << &list << _T("\n");
#endif      

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

SetAt example: A CObList with 2 elements
a CAge at $4D98 40
a CAge at $4DB8 65

См. также

CObject Класса
Диаграмма иерархии
CStringList Класса
CPtrList Класса