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对,这种链表不适合基于索引的操作,我并不想建议在这些情况下使用这样的链表。如果有什么不同的话,以上说明了原因。