c++ 中 string 的 erase的用法 and fill函数
做cf题目时, 发现这个函数 感觉很好用
while(cin>>str){ string::iterator i;i = str.begin(); //string类型的迭代器 str.erase(str.begin()+2,str.end()-1);cout<<str<<"\n";} inpot 1234567890 output 120 int i = 3; str.erase(i,3); input 1234567890 ouput 1237890 int i = 3;str.erase(i,1); input 12345678 output 1235678 int i = 3;str.erase(i); input 1234567890 output 123
erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
偶然发现 当你 int i 没有把它定义成迭代器时,删除 i-1 之后所有的字符
fill函数
在头文件<algorithm>里。
按照数组的始末位置以一个数组元素为单位赋值,将区间内的每一个元素都赋值为val。
用法
fill(vector.begin(), vector.end(), val);
【C++】fill函数,fill与memset函数的区别
fill与memset函数的区别~
-
memset函数
- 按照字节填充某字符
- 在头文件
<cstring>里面
-
fill函数
- 按照单元赋值,将一个区间的元素都赋同一个值
- 在头文件
<algorithm>里面
-
因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有00000000 = 0,-1同理,如果我们把每一位都填充“1”,会导致变成填充入“11111111”
-
而fill函数可以赋值任何,而且使用方法特别简便:
- fill(arr, arr + n, 要填入的内容);
#include<algorithm> #include<vector> #include<cstdio> #include<cmath> int s[100004]; int main(){ int a[100] , n; while(1) { scanf("%d",&n); std::fill(a,a+n,0); for(int i = 0; i < n; i++) printf("%3d ",a[i]); printf("\n"); for(int i = 0; i < n; i++) {a[i] = i; printf("%3d ",a[i]); } printf("\n"); std::fill(a,a+4,14); for(int i = 0; i < n; i++) printf("%3d ",a[i]); printf("\n"); std::fill(a+7,a+10,4); for(int i = 0; i < n; i++) printf("%3d ",a[i]); printf("\n"); std::fill(s, s+n, 10); for(int i = 0; i < n; i++) printf("%3d ",s[i]); printf("\n"); } return 0; } /* input 10 output 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 14 14 14 14 4 5 6 7 8 9 14 14 14 14 4 5 6 4 4 4 10 10 10 10 10 10 10 10 10 10 */

浙公网安备 33010602011771号