使用vector需小心

来源:互联网 发布:linux gcc -o 编辑:程序博客网 时间:2024/05/17 19:17

 typedef struct tag_ShotInfo
{
    char    dir[1024];
    bool    bName;
    char    name[64];
    bool    bChan;
}ShotInfo;

typedef vector<ShotInfo>      ShotInfo_Vector;

CTreeCtrl m_treeCtrl;         // 树控件
ShotInfo_Vector m_Vector;     // 这里假设已经存在一些数据

ShotInfo* pInfo = NULL;

ShotInfo_Vector::iterator pi;
for (pi = m_Vector.begin(); pi != m_Vector.end(); pi++)
{
    pInfo = (ShotInfo*)pi;

    m_TreeCtrl.SetItemData(hItem, (DWORD)pInfo);    // 为树项绑定指针地址
}

到目前为止,程序没有任何问题
但是这时我如果往m_Vector里再增加一个数据
问题就出现了

pInfo = (ShotInfo*)m_TreeCtrl.GetItemData(hItem);

取到的指针对应不到实际数据

======================================================

vector对压入的栈数据会进行管理,当压入项发生变化时,其他
已存在的项指针也可能发生变化,使用在使用迭代器指针时需要小心

======================================================

针对上述问题
建议typedef vector<ShotInfo*>      ShotInfo_Vector;
压入堆数据,即可避免此类问题

=======================================================

欢迎批评指正

原创粉丝点击