CPtrList - 如何获取元素的索引?

CPtrList - How to get index of a element?

本文关键字:元素 索引 获取 何获取 CPtrList      更新时间:2023-10-16

如何获取CPtrList中元素的索引?

class CAge
{
public:
CAge(int nAge){m_nAge=nAge;}
int m_nAge;
};

typedef CTypedPtrList <CPtrList, CAge*> CAgePtrList;
CAgePtrList list;
POSITION pos;
CAge *p1 = new CAge(21);
CAge *p2 = new CAge(40);
list.AddTail(p1);
list.AddTail(p2); 
POSITION pos1 = list.GetHeadPosition();
POSITION pos2 = list.Find(p2,NULL);
int nIndex=pos2-pos1;

如果我从pos1中减去pos2,我得到的值12.我希望值1,因为它是第二个元素。

如何获取元素的索引?

CTypedPtrList是作为链表实现的。指针POSITION不指向连续数组,因此指针算术不会也不能工作(根据C++规则,这也是非法的(。

获取POSITION索引的唯一方法是实际向后迭代,一直到列表的开头并计算步骤。

int nIndex = -1;
for(POSITION pos = pos2; pos; list.GetPrev(pos))
nIndex++;
// nIndex is the 0-based index of POSITION 'pos2' in 'list'
//           or -1 if pos2 == NULL