一. erase()删除

erase 方法原型:

1. basic_string & erase(size_type pos=0, size_type n=npos);

   即erase(pos,n);从给定起始位置pos处开始删除, 删除n个字符, 返回值修改后的string对象引用。比如erase(0,1)就是删除第一个字符。

2. iterator erase(const_iterator position)
即erase(positon),删除迭代器位置处的单个字符(position是个string类型的迭代器), 并返回下个元素的迭代器。

如果position 不是迭代器位置,则删除该位置及之后的所有字符。

3. iterator erase(const_iterator first, const_iterator last)
 即erase(first,last);删除迭代器(first, last)区间的所有字符(first和last都是迭代器),返回一个指向被删除的最后一个元素的下一个字符的迭代器.

#include<iostream>
#include<string>
using namespace std;

int main() {
	string str = "hello the world!";
	string str1 = "hello the world!";
	string str2 = "hello the world!";
	string str3 = "hello the world!";
	string str4 = "hello the world!";

	/****************第1种用法:earse(pos,n)**************************/
	str.erase(6, 2);   
	cout << "<" << str << ">" << endl;  // <hello e world!>    
	/****************第2种用法:earse(position)***********************/
	str1.erase(8);  //如果pos不是迭代器位置,则删除该位置及之后的所有字符
	cout << "<" << str1 << ">" << endl;    //  <hello th>

	str2.erase(str2.begin()); //如果pos是迭代器,则
	cout << "<" << str2 << ">" << endl;    //  <ello the world!>
	/****************第3种用法:earse(fist,last)**********************/
	str3.erase(str3.begin() + 3, str3.end()-3);
	cout << "<" << str3 << ">" << endl;     // <helld!>
	str4.erase(str4.begin() + 3, str4.end());
	cout << "<" << str4 << ">" << endl;    //  <hel>
	system("pause");
	return 0;
}

结果如下所示:

 erase()函数的应用:删除指定字符。

示例:想要删除时间戳里的‘.’ ,只留下数字。

//通过find找到需要删除的字符/字符串的位置:

string str;
string target;
int pos = str.find(target);

//然后通过erase进行删除:

n = target.size();
str = str.erase(pos,n);           //从pos这个位置开始,删除n个字符


二. remove()删除

功能:remove是删除和指定元素值相同的所有元素,但删除掉的元素会被其他元素代替(remove需要和erase搭配使用才能完整的删除)。

        remove函数实际上并未将元素完全删除,因为容器的大小未发生改变,只是将所有被删除的元素用下一个未被删除的元素覆盖掉,同时返回一个迭代器。在该迭代器之前的所有元素,保留原容器的顺序,并且不存在被删除的元素,而该迭代器到容器的末尾则不变。

      即原容器的大小不变,被删除的元素删掉了,但容器末尾的一些元素(个数等于被删除元素个数)又会多出来一份。所以说remove需要和erase搭配使用才能实现完整的删除功能,彻底删除掉想删除的元素,并改变容器大小。
   

	vector<int> vec = { 1,1,1,3,4,5,6,7,8};

	vec.erase(remove(vec.begin(), vec.end(), 1), vec.end());

  

 

三、pop_back() 删除元素

使用pop_back()删除string中的元素,但其只能删除string的最后一个元素。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐