C++中如何对vector删除元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中如何对vector删除元素相关的知识,希望对你有一定的参考价值。

vector<edge>::iterator v;
vector<edge>::iterator v1;
for(v = li.begin();v != li.end();v++)

for(v1 = li1.begin();v1 != li1.end();v1++)

if(*v == *v1)

v = li.erase(*v);




其中edge是一个class类型,是想实现类似java中 li.removeAll(li1) 功能的一段代码
不知道为什么总是报错啊~~~~(>_<)~~~~ 求大神们指教!

vector是绝对不能这样删除的,这样删除肯定会出错,简单的总结就是一边删除,一边循环绝对不能这样做
你可以再利用一个vector存储不重复的
到最后赋值追问

可以帮我写出来么?存储 li 中与 li1 中不重复的是吗?编程菜鸟表示很捉急啊%>_<%

追答

vector::iterator v;
vector::iterator v1;
vector result;
for(v = li.begin();v != li.end();v++)

for(v1 = li1.begin();v1 != li1.end();v1++)

if(*v != *v1)

result.push_back( *v ) ;




v = result ;

参考技术A 应该是 v=li.erase(v); 这样就没有问题了追问

试过了,还是有问题……

追答

我给你一个vector做删除的示例代码

#include
using namespace std;
void main(void)

vector array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(4);
array.push_back(5);

vector::iterator itr = array.begin();
while (itr != array.end)

if (*itr == 3)array.erase(itr);//删除值为3的元素
++itr;


//若是最后一个可用array.pop_back()

你可以把你的for循环改为while,还有就是报什么错,给贴出来啊

追问

总是提示字数过多- -只好截图了

在115行和117行有报错

追答

找找vector的库函数是什么 把它加载这个文件里面 #include 这个我不记得了

参考技术B class function

private :
TCards tCard;

public :
function(TCards &temp)

tCard.D=temp.D;
tCard.V=temp.V;

bool operator() (TCards &temp)

if( tCard.D==temp.D&&tCard.V==temp.V)
return true;
return false;

;

for(int i=0;i<dvCardReject.size();i++)

dvCardALL.erase(remove_if(dvCardALL.begin(),dvCardALL.end(),function(dvCardReject[i])),devCardALL.end());

希望对你能有所帮助。

C++从vector中删除指定元素

①只删除一个元素

vector<int> num;

for(vector<int>::iterator iter=num.begin();iter!=num.end();iter++)        //从vector中删除指定的某一个元素 
    if(*iter==k)
        num.erase(iter);
        break;
    


②删除指定的多个重复元素

erase函数的返回的是指向被删除元素的下一个元素的迭代器,所以执行erase()后要把迭代器减1,指向前面一个,执行循环+1的时候就可以恢复到正常位置了

for (vector<int>::iterator iter = num.begin(); iter != num.end();iter++) 
        if (*iter == k)
            iter = num.erase(iter);
            iter--;                    //erase函数的返回指向当前被删除元素的下一个元素的迭代器
    


以上是关于C++中如何对vector删除元素的主要内容,如果未能解决你的问题,请参考以下文章

C++中,vector参数为类型时,如何查找和添加元素?

C++ 中 vector 如何实现内存分配

在 O(1) 复杂度 C++ 中删除 vector<int> 的最后 n 个元素?

C++从vector中删除指定元素

从 C++ std::vector 中删除元素

c++ 如何在不改变 end() 的情况下擦除元素