cpp将vector迭代器转换为指针的方法

⌚Time: 2022-03-10 21:52:27

👨‍💻Author: Jack Ge

定义一个Domain结构体以及容器、迭代器


struct Domain{

    int ID;

    string name

    string description;

};

vector <struct Domain> domainVec;

int main(){

    ...

    vector <struct Domain>::iterator iter=domainVec.begin();

    ...

return 0;

}

若要从迭代器iter中取出特定元素,可以使用


struct Domain domain=*iter;

指针相对于变量,可以通过删除指针,赋值NULL这种编程技巧,表示指针所指向的变量不可用或已失效。而变量就没有这种特性了,变量是永远有值的。

转化成指针,就需要使用如下形式


struct domain *pDomain=&*iter;

迭代器转换为指针的应用:将vector指定元素清空。


memset((void*)&*iter, 0, sizeof(*iter));

但是此时pDomain成为一个危险的指针,可以通过pDomain++pDomain--等形式访问domainVec容器中的内容,容易出现越界等错误。应该注意


cout<<"domain ID="<<p->ID<<endl;

p++;

p++;

...

cout<<"domain ID="<<p->ID<<endl;


迭代器对容器删除等操作。可能造成此指针指向的内容改变!