[英]How can a CPtrList->RemoveHead() cause an CInvalidArgumentException?
[英]CPtrList - How to get index of a element?
如何获取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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.