C C Utility Functions - swchen1234/Algorithm GitHub Wiki

String Operation

string -> integer

int stoi(string)

integer to string

string to_string(int) string to_string(double)

char to integer

int a = "4" - "0";

char to ascii

int("a")


Tokenization

std::vector<std::string> split(const std::string& s, char delimiter)
{
   std::vector<std::string> tokens;
   std::string token;
   std::istringstream tokenStream(s);
   while (std::getline(tokenStream, token, delimiter))
   {
      tokens.push_back(token);
   }
   return tokens;
}

Lower_bound and Upper_bound

lower_bound return the first element >= val; upper_bound return the first element > val.


C++ 11/14

A good summary

使用auto需要注意以下几点:

                1.auto变量必须在声明的时候对它进行初始化,在编译期编译器要根据初始表达式来推导auto的实际类型,因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。 

               2.auto不能做函数的形参

              3.auto不能定义类的非静态成员变量

              4. 不能用auto来声明数组

              5.不能用auto来实例化模板

              6.对于具有const属性的变量,auto可以带不过来这个属性(如:const int a=10; auto b=a;)b不具备a的const属性

              7.对于valatile修饰的变量,auto可以带走这个属性

              8.想要用auto在一行同时声明多个变量,这些变量必须具有相同类型,否则编译器会报错

decltype可以用来推导函数的返回类型: 1. 如果没有带参数,推导函数的类型 2.如果带参数列表,推导的是函数返回值的类型

decltype推导的四个规则  

1.单个标记符表达式和类成员访问符,推导为本类型

2.将亡值,推导为类的引用

3.左值,推导为类型的引用

4.以上都不是,推导为本类型

捕捉列表描述了上下文中那些数据可以被lambda使用,以及使用的方式传值还是传引用。  捕捉列表有以下形式: [var]:表示值传递方式捕捉变量var [=]:表示值传递方式捕获所有父作用域中的变量(包括this) [&var]:表示引用传递捕捉变量var [&]:表示引用传递捕捉所有父作用域中的变量(包括this) [this]:表示值传递方式捕捉当前的this指针 注意:这里的父作用域指包含lambda函数的语句块

语法上捕捉列表可由多个捕捉项组成,并以逗号分割。比如:   [=, &a, &b]:以引用传递的方式捕捉变量a和b,值传递方式捕捉其他所有变量   [&,a, this]:值传递方式捕捉变量a和this,引用方式捕捉其他变量   注意:捕捉列表不运行变量重复传递,否则就会导致编译错误。   [=, a]:=已经以值传递方式捕捉了所有变量,捕捉a重复