STL算法积累

C++是C的一次进化,但由于添加了类/继承/多态/模板等等而增加了代码重用的效率,增加了STL库/算法等等而增加了达到某种目的的效率,但后一种则为学习C++带来了困难,这里不再是语法规则的说明,而是重要函数的使用,更偏向于记忆,而不是理解。

下面积累STL算法知识。

find()方法

find()方法有两种:

  1. 容器自带的find方法(string::find())
  2. algorithm中的find方法

find方法有:find/rfind/find_first_of/find_last_of/find_first_not_of/find_last_not_of

string::find()方法

1
2
3
4
size_type find(const _CharT* __s, size_type __pos, size_type __n) const;
size_type find(const basic_string& __str, size_type __pos = 0) const
size_type find(const _CharT* __s, size_type __pos = 0) const
size_type find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT;

注意:

  1. 位置参数是数值(如字符[串]),而且所要查找的值作为第一个参数传递
  2. 如果没有找到查找值,则返回string::npos

algorithm中的find方法

1
2
template<calss InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, Const T& value)

注意:

  1. 这里位置参数采用的都是迭代器,而且所要查找的值作为最后一个参数传递
  2. 如果没有找到查找值,则返回迭代器last

string的其他方法

substr

1
basic_string substr(size_type pos = 0, size_type n = npos) const;

这里返回一个从pos开始的n个字符的字符串,不是从第一个参数到第二个参数之间的字符串

set关联容器

值类型和键类型一致的容器

  1. set和vector一样都是容器,存在于一个单独的实现文件:set
  2. set容器不能像vector一样采用下标访问

经典案例

int转换为string

  1. 通过iostringstream
1
2
3
4
5
6
7
8
#include <sstream>

int x = 123;
string str;
stringstream strstream;

strstream << x;
strstream >> str;

string转换为int

通过atoi转换为int

atoi的原型:

1
2
3
#include <stdlib.h>

int atoi(const char *nptr)

使用

1
2
3
int x;
string str = "123";
x = atoi(str.c_str());

注意:atoi和itoa处理的都是c风格字符串,也就是char型数组;
注意:这里只是将string转换为int,如果想转化为long/double就不能采用这种方法了;

通过iostringstream

1
2
3
4
5
6
7
#include <sstream>

stream str = "9646324351";
long x;
istringstream istrstream(str);

istrstream >> x;

这里string转换后结果显然超过了INT_MAX,采用iostringstream则可以达到任何的转换的目的;

Brick wechat
扫一扫,用手机看更方便(^ ◕ᴥ◕ ^)