目录
vector中的erase和find
1.vector.erase()
iterator erase(iterator position)
①删除指针所指的元素
②返回指向下一个元素的迭代器
vector<int> vec{1,2,3,4,5}
for(vector<int>::iterator it=vec.begin();it!=vec.end();)
{
if(*it==3) it=vec.erase(it);//直接写vec.erase(it)会出错,删除一次会变成野指针,无法进行下一次it++
else it++;
}
vec会变为{1,2,4,5}
iterator erase(iterator first, iterator last)
①删除[first,last)范围内的元素,不包含last
②返回指向last元素的迭代器(其实本质也就是返回指向下一个元素的迭代器
vector<int> vec{1,2,3,4,5};
vector<int>::iterator it=vec.erase(vec.begin(),vec.begin()+2);
vec会变为{3,4,5}
2.vector.find()
vector<int> vec{1,2,3};
vector<int>::iterator it=find(vec.begin(),vec.end(),3);
if(it==vec.end()) 没找到
if(it!=vec.end()) 找到了
string中的erase和find
1. string.erase()
str.erase(10,8);//删除下标‘10’开始的连续8个字符
str.erase(10);// 也可以使用下标进行删除操作,删除下标10开始及以后的字符
str.erase(pos);//删除pos处的一个字符(pos是string类型的迭代器)
str.erase(it2,it3); //删除it2到it3之间的元素,删除迭代器 [first, last) 区间的所有字符,特别注意这里的区间是左闭右开的
str.erase(it2,it3)类似前面的vector的方法
2.string.find()
例1:找到目标字符的位置
string s = "hello world!";
cout << s.find("e") << endl;
结果为:1
例2:未找到目标字符
string s = "hello world!";
if (s.find("a") == s.npos) {
cout << "404 not found" << endl;
}
结果为:404 not found
例3:指定查找位置
string s = "hello world!";
cout << s.find("l",5) << endl;
结果为:9
从空格开始(包含空格)的后半部分字符串中寻找字符"l",结果找到了world中的"l"在整个字符串中的位置
例4:找到目标字符在字符串中第一次出现和最后一次出现的位置
string s = "hello world!";
cout << "first time occur in s:"<<s.find_first_of("l") << endl;
cout << "last time occur in s:" << s.find_last_of("l") << endl;
结果为:
first time occur in s:2
last time occur in s:9
例5:反向查找:
string s = "hello world!";
cout << s.rfind("l") << endl;
结果为:9
即从后往前第一次出现"l"的位置