C++ Primer 笔记 第 6 章 函数

 

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  // 输出大写字母