1.vector中为基本类型的变量
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> vec;
vec.emplace_back(1);
vec.emplace_back(2);
vec.emplace_back(3);
vector<int>::iterator iter = std::find(vec.begin(), vec.end(), 2); // 查找对象类型时,需要该类提供重载==函数
if (iter != vec.end())
{
vec.erase(iter);
}
for(int i = 0; i < vec.size(); i++){
cout << vec[i] << endl; // 输出1, 3
}
return 0;
}
out:
1
3
2.存放的为类变量
2.1 find()
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class A
{
private:
int a_;
int b_;
public:
A(int a, int b):a_(a), b_(b){
}
~A(){}
int get_a(){
return a_;
}
int get_b(){
return b_;
}
bool operator==(A t){
return t.get_a() == get_a() && t.get_b() == get_b();
}
};
int main(){
// A a(1);
// cout << a.get_a() << endl;
vector<A> vec;
vec.emplace_back(A(1, 1));
vec.emplace_back(A(2, 2));
vec.emplace_back(A(3, 3));
vector<A>::iterator iter = std::find(vec.begin(), vec.end(), A(2, 2)); // 查找对象类型时,需要该类提供重载==函数
if (iter != vec.end())
{
vec.erase(iter);
}
for(int i = 0; i < vec.size(); i++){
cout << vec[i].get_a() << endl; // 输出1, 3
}
return 0;
}
out:
1
3
2.2 find_if()
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class A
{
private:
int a_;
int b_;
public:
A(int a, int b):a_(a), b_(b){
}
~A(){}
int get_a() const{ // const解释:https://blog.csdn.net/weixin_43734095/article/details/104465307
return a_;
}
int get_b() const{
return b_;
}
// bool operator==(A t){
// return t.get_a() == get_a() && t.get_b() == get_b();
// }
};
class vector_finder
{
public:
vector_finder(const int a, const int b):a_(a), b_(b){}
bool operator ()(const std::vector<A>::value_type &value)
{
return value.get_a() == a_ && value.get_b() == b_;
}
private:
int a_;
int b_;
};
int main(){
// A a(1);
// cout << a.get_a() << endl;
vector<A> vec;
vec.emplace_back(A(1, 1));
vec.emplace_back(A(2, 2));
vec.emplace_back(A(3, 3));
vector<A>::iterator iter = std::find_if(vec.begin(), vec.end(), vector_finder(2, 2));
if (iter != vec.end())
{
vec.erase(iter); // 删除指定元素
}
for(int i = 0; i < vec.size(); i++){
cout << vec[i].get_a() << endl; // 输出1, 3
}
return 0;
}
out:
1
3
3.参考文章
vector应用之STL的find,find_if,find_end,find_first_of,find_if_not(C ++ 11)
C++ vector容器 find erase的使用:查找并删除指定元素