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时会自动将这些数组形式的元素(和其他类型的数组一样)转换成指向该数组内首元素的指针。
取余操作的符号和第一个数相同
PREVIOUSC++ Primer 笔记 第 6 章 函数
NEXT内存管理