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