vector和string中的erase和find易混淆点

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"的位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值