您当前的位置: 首页 >  c++

不牌不改

暂无认证

  • 0浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ STL 常用函数

不牌不改 发布时间:2022-04-23 17:15:00 ,浏览量:0

vector 常用函数
  • 构造函数

    这里的技巧还是挺多的,但容易忽略

    vector v,默认初始化,大小为0,适合不知道元素个数的情况;

    vector v(v1)vector v = v1,拷贝一份来构造,vv1具有相同的元素;

    vector v = {value1, value2, ...}vector v {value1, value2, ...},用已知元素初始化;

    vector v(number),指定空间为number,每个元素进行缺省的值初始化。对于int,也就是被赋值为0。当程序运行初期元素大致数量可预知,而元素的值需要动态获取的时候,可采用这种初始化方式;

    vector v(number, value),还是指定空间为number,只不过这number个元素都初始化为value

  • 二维 vector 的初始化

    vector < vector > v,默认;

    vector < vector > v(v_d2),用二维vectorv_d2来初始化v

    vector < vector > v(rownum, vector_),第一个参数的含义是“有多少个子vector”,第二个参数表示每个子vector是什么样的。第二个参数可以传入上面讲到的构造一维vector的任何形式。比如:vector < vector > v(rownum, vector (colnum))表示一个全部元素为0的rownumcolnum列的二维vector,或者直接理解为二维数组;再比如vector < vector > v(rownum, vector (colnum, 10))就是将这个二维vector再初始化为10。

  • 访问

    v[idx]v.front()v.back(),访问索引为idx的元素,访问第一个元素,访问最后一个元素。

  • 插入与删除

    v.push_back (value),在vector末尾添加一个元素value

    v.insert (iter, value),在迭代器位置添加元素value

    v.pop_back (),删除vector末尾元素;

    v.erase(iter),删除迭代器位置的元素。

  • 翻转、排序、获取最大值最小值元素

    这些函数所在头文件为algorithm,而不是vector

    reverse(v.begin(), v.end()),翻转。

    sort(v.begin(), v.end()),排序,也可以传入cmp

    max_element(v.begin(), v.end())min_element(v.begin(), v.end())分别表示获取最大值和最小值对应的迭代器,所以一般我们都在前面加上*,直接获取元素值。

    另外,由于vector和string可以采用*(iter+1)的方式进行访问(其他STL不行),所以可以出现部分翻转和部分排序,比如reverse(v.begin(), v.end())sort(v.begin()+1, v.end())*max_element (v.begin(), v.end()-1)等。

  • 常见的函数

    size()empty()clear()

string 常用函数
  • 构造函数

    这里的技巧还是挺多的,但容易忽略

    string s:空串;

    string s(str):与str一样的串;

    string s(str, pos, number):相当于取str从索引pos开始的number个字符的子串进行初始化;如果不传入number则取到str末尾(这完全就是substr后再赋值嘛)

    string s(number, ch):用number个字符ch进行初始化。

  • 字符串长度

    .size().length()(我比较喜欢前者,因为前者输入的字符少~)

  • 获取最后一个位置的字符

    s.back()

  • 大小写转换

    转换为大写:transform (s.begin (), s.end (), s.begin (), ::toupper) 转换为小写:transform (s.begin (), s.end (), s.begin (), ::tolower)

    也可以遍历字符串,对每个字符进行s[i] = tolower(s[i])的操作来转为小写。

  • 查找

    未查找到:s.find ('a') == string::npos,返回1表示未找到,返回0表示找到了

    从索引为i处开始查找:s.find ('a', i),若找到,返回所在索引位置,没找到返回string::npos

    当然,也可以查找是否包含某个子串。

  • 获取子串

    s.substr (pos, number),从索引为pos的位置开始向后截取number个元素(含poss.substr (pos),从索引为pos的位置开始向后截取到末尾

  • 删除字符或字符串

    s.erase(pos, number),从索引为pos的位置开始向后删除number个元素(含poss.erase(pos),从索引为pos的位置开始向后删除到末尾

  • 插入字符串

    s.insert (pos, str),将str的首字符放在spos位置,其余字符后移。str只能是字符串不能是字符。

  • 部分替换

    s.replace(pos, number, str),将子串s[pos~pos+number-1]的位置全部换成字符串str

    另一种传参形式为s.replace(pos, number, n, ch)等价于s.replace(pos, number, string(n, ch))

  • .c_str()的用法

    将string(C++)转换为char *(C),常见的两个用法: printf(%s, s.c_str())atoi(s.c_str())

  • 字符串比较大小

    如果题目要求按字典序排序,则直接通过操作符>{1, 2}, {5, -1}, {-1, 0}};

关注
打赏
1662186765
查看更多评论
0.0422s