Класс 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
см. в статье "Коллекции".
Иерархия наследования
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
, возвращает GetHead
CObject
указатель. Это позволяет использовать функцию только в правой части инструкции назначения и таким образом защищает список от изменения.
Если доступ к списку осуществляется напрямую или через указатель на объект 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
, а затем задает rPosition
POSITION
значение следующей записи в списке.
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
, а затем задает rPosition
POSITION
значение предыдущей записи в списке.
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
Класс