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

C++ CPtrList-如何获取元素的索引?,c++,mfc,C++,Mfc,如何获取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(

如何获取
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;
类框架
{
公众:
CAge(int-nAge){m_-nAge=nAge;}
内部管理;
};
typedef CTypedPtrList CAgePtrList;
笼子名单;
位置pos;
保持架*p1=新的保持架(21);
保持架*p2=新保持架(40);
列表。AddTail(p1);
AddTail(p2);
POSITION pos1=list.GetHeadPosition();
POSITION pos2=list.Find(p2,NULL);
int-nIndex=pos2-pos1;
如果我从
pos1
中减去
pos2
,我得到的值是
12
。我期望值
1
,因为它是第二个元素


如何获取元素的索引?

CTypedPtrList
作为链表实现。<代码>位置<代码>指针不指向连续数组,指针算法将不工作,不能工作(它也被C++规则非法)。 获取
位置的索引的唯一方法是实际向后迭代到列表的开头并计算步骤

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

CTypedPtrList
作为链表实现。<代码>位置<代码>指针不指向连续数组,指针算法将不工作,不能工作(它也被C++规则非法)。 获取
位置的索引的唯一方法是实际向后迭代到列表的开头并计算步骤

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

如果您想使用索引,那么您可能应该使用
cTypedTrarray
而不是
CTypedPtrList
。如果您想使用索引,那么您可能应该使用
cTypedTrarray
而不是
CTypedPtrList
。。。。但这是非常低效的。很久以前,我的任务是修复某些软件的慢度,这或多或少是造成慢度的原因。@Jabberwocky对,这种链表不适合基于索引的操作,我并不想建议在这些情况下使用这样的链表。如果有什么不同的话,以上说明了原因。。。。但这是非常低效的。很久以前,我的任务是修复某些软件的慢度,这或多或少是造成慢度的原因。@Jabberwocky对,这种链表不适合基于索引的操作,我并不想建议在这些情况下使用这样的链表。如果有什么不同的话,以上说明了原因。