如何获取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;

如果我从pos2中减去pos1,我将获得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

10-08 11:41