开发者社区> 问答> 正文

关于STL vector的遍历问题,请问怎样一边操作一边遍历删除?

#include
#include
#include
#include 
#include
using namespace std;
typedef struct rect
{
int id;
int length;
int width;
}Rect;
vector vec;
void * add(void *argc)

{ int i;
Rect r;
while(1){
sleep(1);
for(i=0;i<10;i++){
r.id=i;
r.length=i;
r.width=i;
vec.push_back(r);
}
}
return NULL;

}
void * delete4(void *argc){
while(1){
vector::iterator it=vec.begin();
for(it=vec.begin(); it!=vec.end();)
{
if(it->id== 4)
{
//将it赋值为erase()的返回值,它指向the new location of the element that followed the last element erased
vec.erase(it);
}
else
++it;
}
}
return NULL;
}
int main()
{ pthread_t tidp1;
pthread_t tidp2;
pthread_create(&tidp1,NULL,add,NULL);
pthread_create(&tidp2,NULL,delete4,NULL);
while(1){
sleep(2);
vector::iterator it=vec.begin();
for(it=vec.begin(); it!=vec.end(); ++it)
cout<id<<endl;

}
return 0;
}

展开
收起
a123456678 2016-03-09 13:35:36 2709 0
1 条回答
写回答
取消 提交回答
  • #include <vector>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char** argv)
    {
        std::vector<int> vec;
        for(int i=0;i<100;i++)
        {
             vec.push_back(i);
        }
    
        printf("10:%d\n",vec[10]);
        printf("size:%d\n",vec.size());
        printf("**********************************\n");
        std::vector<int>::iterator it = vec.begin()+10;
        vec.erase(it);
    
        printf("10:%d\n",vec[10]);
        printf("size:%d\n",vec.size());
        return 0;
    }
    2019-07-17 18:55:56
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云数据中台电信行业数据模型白皮书 立即下载
阿里云数据中台零售数据模型白皮书 立即下载
消电行业数据中台解决方案白皮书 立即下载