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
View Code

 

 

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

 */
View Code

 

posted @ 2018-12-05 18:40  163467  阅读(837)  评论(0)    收藏  举报