使用迭代器遍历容器
vector<struct SM> vec;
...
vector<struct SM>::iterator iter;
for(iter = vec.begin(); iter != vec.end(); iter++){
cout<<iter->id<<end;
}
for循环遍历容器
for(int i=0; i<vec.size(); i++){
cout<<vec.at(i).id<<end;
}
查找容器元素特定是否存在
int findID = 3;
vector<struct SM>::iterator iter;
for(iter = vec.begin(); iter != vec.end(); iter++){
if(iter->id == findID){
break;
}
}
if(iter == vec.end()){
cout<<"元素不存在"<<endl;
}else{
cout<<"元素存在"<<endl;
}
清空容器
vector<struct SM>().swap(vec);
或者
vec.swap(vector<struct SM>());
删除特定元素
使用erase删除迭代器指向的指定元素后,迭代器会失效,通常以下写法会导致程序崩溃
string qs = "aa";
vector<struct SM>::iterator iter;
for(iter = v->begin();iter!=v->end();iter++){
if(!iter->name.compare(qs)){
v->erase(iter);//iter 失效,下次循环会崩溃
}
}
}
正确写法
string qs = "aa";
vector<struct SM>::iterator iter;
for(iter = v->begin();iter!=v->end();){
if(!iter->name.compare(qs)){
iter = v->erase(iter);//使用erase返回的迭代器重新赋值iter
}else{
iter++;
}
}
或者
char *pstr = "jone";
for (int i = 0; i < vuser->size(); i++){
if (!strcmp(vuser->at(i).name, pstr)){
vuser->erase(vuser->begin() + i);
i--;//自动右移一位,防止漏掉一个元素
}
}