6.1 函数基础
局部静态对象在第一次经过时初始化。
6.2.5 可变形参 C++11
initializer_list<T>
传递的时候用 {}
initializer_list 中的元素是常量
形参中的函数类型和函数指针类型可以转化,返回类型中不行。 using F = int(int, int); //函数类型 using PF = int()(int*, int); //指针类型
PF f1(int); F f1(int); auto f1(int) -> int () (int*, int);
类中的引用、const成员必须这样初始化 ConstRef (int ji): i(ii), ci(ii), ri(i){} 初始化顺序与类中出现的顺序一致 委托构造函数: C1():C1(1,2,3){}
swap交换数据结构不交换数据,迭代器引用指针不失效,时间快 string的会失效 array会真正交换,迭代器等的元素会变
泛型算法永远不会执行容器操作,只会运行在迭代器之上 插入迭代器 back_inserter(vec)
对于list 和forward 1ist, 应该优先使用成员西数版本的算法而不是通用算法
3.2 标准库类型 string
#include <string>
using std::string
3.2.1 定义和初始化 string 对象
string s1; // empty
string s2(s1); // 副本;直接初始化
string s2 = s1; //和上面一样;拷贝初始化
string s3("value"); //
string s3 = "value"; //和上面一样
string s4(n, 'c'); //n 个 c;直接初始化
使用等号就是拷贝初始化
3.2.2 string 对象上的操作
os << s // 将 s 写到输出流 os 当中,返回os
is >> s // 从 is 中读取字符串赋给 s,字符串以空白分隔,返回 is
getline(is, s) //
s.empty()
s.size()
s[n]
s1+s2
s1=s2
s1==s2
s1!=s2
<, <=, >, >= // 字典序比较,大小写敏感
读写 string 对象
cin >> s; //从非空读到空格
读取未知数量
string word;
while(cin>>word){
...
}
使用 getline 读取一整行,换行符会丢掉
string line;
while(getline(cin, line)){
...
}
size()
函数返回的实际上是 size_type
类型,无符号类型,所有用于存放 string 类 size 函数返回值的变量,都应该是 string::size_type 类型。小心类型混用。
比较 string 对象
前面一样,短的小。某些位置不一样的话,比较第一对相异字符
两个 string 对象相加
+
+=
字面值和 string 对象相加
+
两侧至少有一个是 string 对象。先算左边。
处理 string 对象中的字符
isalnum(c) // 字母或数字时为真
isalpha // 字母
iscntrl //控制字符
isdigit // 数字
isgraph // 不是空格但可打印
islower // 小写字母
isprint // 可打印,可以是空格
ispunct // 标点符号,不是控制字符、字母、数字、可打印空白
isspace // 空格、横向制表符、纵向制表符、回车、换行符、进纸符
isupper // 大写字母
isxdigit // 十六进制数字
tolower // 输出小写字母
toupper // 输出大写字母