C++ Primer 笔记 第 3 章 字符串、向量和数组

 

endl会刷新缓冲区 long long是C++11中新定义的 char表现为signed char还是unsigned char由编译器决定 加extern就只声明不定义了

const int *p=nullptr; 是底层 constexpr int *p=nullptr; 是顶层,指针本身不能变

const 和 typedef 一起出现时不能替换理解 decltype与类型紧密相关,多加一个括号时的结果永远是引用,需要初始化

3.1 命名空间的 using 声明

using std::cin;
using namespace std;

头文件不应包含 using 声明

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

多维数组

要使用范国for 语句处理多维数组,除了最内层的循环外 ,其他所有循环的控制变量都应该是引用类型。因为编译器初始化r ow时会自动将这些数组形式的元素(和其他类型的数组一样)转换成指向该数组内首元素的指针。

取余操作的符号和第一个数相同