2 qq 31359953 qq_31359953 于 2016.03.30 16:21 提问

关于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;

}


5个回答

qq_31359953
qq_31359953   2016.03.30 16:22

请问这个程序怎么让他跑起来,提示为段错误

lx624909677
lx624909677   Ds   Rxr 2016.03.30 16:25

遍历的时候,想要删除哪个,就在哪个那里用pop_back,和你添加时候类似

lx624909677
lx624909677 回复Cessi: 额看错了不好意思,指定位置就用erase呗
2 年多之前 回复
qq_31359953
qq_31359953 pop_back不是删除尾部吗?
2 年多之前 回复
CSDNXIAON
CSDNXIAON   2016.03.30 16:33

stl vector/list如何一边遍历一边删除
STL Vector 的遍历删除
STL Vector 的遍历删除
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

qq423399099
qq423399099   Ds   Rxr 2016.03.30 17:32

如果楼主要一边操作一边遍历删除要么考虑加锁,要么换个STL,不然迭代器可能会失效
参考http://blog.csdn.net/zhongjiekangping/article/details/5624922

lx624909677
lx624909677   Ds   Rxr 2016.03.30 17:42

#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;
}

erase用法是这样的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
stl vector/list如何一边遍历一边删除
有时候我们在遍历stl的容器的时候需要删除一些不符合条件的item,这时候我们就要担心iterator是不是因为原始的数据的改变而发生改变,因此往往比较容易出现一些问题, 下面比较一下list 和 vector的两种一边遍历一边删除: // list list lll; // vector // vector lll; lll.push_ba
JAVA List 一边遍历一边删除元素,报java.util.ConcurrentModificationException异常
在使用set/map时,一个可爱的小bug:java.util.ConcurrentModificationException   【错误场景1】:set容器,边遍历,边add/remove元素 Set set = new HashSet(); for (int i = 0; i set.add(Integer.toString(i)); } for (
stl(二)------如何在vector中添加元素,以及遍历元素
#include "stdafx.h" #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector Index; int i;     for ( i= 0; i     { Index.push_back(i);  //元素添加     } //第一种用
遍历vector时插入与删除
//在遍历vector时,中间插入与删除需注意,有坑 //本示例在每个数字“3”后面插入“4” vector&amp;lt;int&amp;gt; vec1 = {1,3,2,3,5,3}; vector&amp;lt;int&amp;gt;::iterator it1 = vec1.begin(); int i = 0; int idx = 0; while (it1 != vec1.end()) { if (...
如何边遍历集合边删除元素--使用Iterator中的remove()方法
在遍历集合时,想将符合条件的某些元素删除,开始是用了下面的方法 public static void main(String[] args) throws UnsupportedEncodingException { List list = new ArrayList(); list.add("abc"); list.add("bbc"); list.add("cbc");
Java集合怎么一边删除一边遍历
问题描述: Java新手容易犯一个错误,就是遍历集合的同时删除集合的元素。那么程序会发生什么呢?下面举个小例子。import java.util.HashSet; import java.util.Iterator; public class IterAndRemove { public static void main(String[] args) { HashSet<St
数组如何一边遍历一边删除元素
1.此文转载于http://blog.csdn.net/zhangzhan_zg/article/details/38453305 在学习Objective-C的过程中,我们会学到NSMutableArray这个类,也就是可变数组。在做和可变数组相关的编程题的时候,我们会遇到一个这样的问题:在对数组遍历时删除数组元素。 有些人一看,很简单嘛,forin 遍历就解决了,我们来看一下用
ArrayList边遍历自身边删除元素的方法
今天写代码时,需要删除一个列表中的某个元素,于是就用了一个循环,一边遍历一边删除,一个同事在review我的代码时告诉我,不能这样写,会出问题。for(int i = 0; i < list.size(); i++){ if(list.get(i).icon_name.equals("shape8"){ list.remove(i); } }于是,Google了一下,
一边遍历,一边删除迭代器的问题
map>::iterator it=co.begin(); while(it!=co.end()){ if(it->second==0)co.erase(it);     it++; } 不管删不删除,都是it++;
用list自带的迭代器,实现边遍历边添加的功能
package com.list; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class demo3_list { /** * 用list自带的迭代器,实现边遍历边添加元素的功能