紫书知识点记录(持续更新)

开一篇帖子记录一下看书时觉得重要的知识点吧,想起来的话就加进来,总比没有强…

  1. “一等公民”指既可以作为参数传递,又可以从子程序中返回,还可以直接赋给它变量的类型,“二等公民”指尽可以作为参数传递的类型,“三等公民”指三者都做不到的类型。
  2. getchar()可用来读取包含空格、换行符的字符串。
  3. 乘以2也可以写成“<<1”,意思是左移一位。(感觉有点复杂,还没掌握)
  4. 回车换行符:Linux系统中为"\n",MacOS中为"\r",Windows中两者都有。
  5. “&“得到的是对象的地址,所以”*”+"&"得到的是对象的值。
  6. string类型的常用函数:strcmp:字符串比较;strcpy:设置字符串的值;strcat:字符串相加。
  7. isalpha是一个宏定义,包含于头文件中,用来判断对象是否为一个字母。类似的还有isalnum等。
  8. algorithm头文件中的sort可以给任意对象排序,包括内置类型和自定义类型,前提是类型定义了“<”运算符。排序之后可以用lower_bound(x)查找大于或等于x的第一个位置。待排序/查找的元素可以放在数组里,也可以放在vector里。(《算法设计入门经典》)
  9. vector,向量,可以称之为动态数组,它是一个不定长度的数组,也是一个模板类。(按照数组来理解的话会比较简单,之前一直搞不懂)
  10. 模板是C++泛型编程的基础,可以按照字面意思理解它的用处。我还没有深入地了解,所以只记录一些基础知识:模板有结构体模板,函数模板和类模板。举个例子来说明它的结构:
    template <typename T>
	T sum(T* begin,T*end){}
  1. sstream头文件可以把string作为流进行读写。这部分没太搞懂。理解的部分是:getline(cin,line)从流中读入一行数据并存到string类型的line中。对于stringstream ss(line),我的理解是创建一个字符串流ss用以读取字符串line的内容,我是把它看做默认构造函数来使用的。创建好后ss就和cin用法相同了。
  2. 假设向量a中存放着许多单词,sort(a.begin,a.end)可以做到对a中元素按照字典序排列。
  3. tolower( c):若c有对应的小写字母,则返回该小写字母,否则返回c本身。
  4. 两个容器:set(集合)和map(映射),这部分还需要查阅资料细致地学习。
  5. set::count(x)用来在容器中搜索键为x的元素,并返回元素在容器中出现的次数。但是因为set容器不允许重复的键,这意味着如果找到元素,函数实际上返回1,否则返回0。map::count(x)同理。
  6. set_union()和set_intersection()均为函数模板,分别实现了集合的并集、交集的运算。
  7. inserter(c,i)是为容器c和迭代器i构造std::insert.iterator的便利函数模板。(我的理解是创建一个迭代器用以指向容器c的i位置)
  8. 函数substr(start,len)返回从start开始,长度为len的子串,也就是截取调用者的一部分。如果没有len参数,则返回start之后的所有部分。
  9. 可以使用auto遍历字符串、数组、STL容器等,形式简洁。示例代码如下(取自UVa12504):
for (auto& p : s)
		if (p == '{' || p == '}' || p == ',' || p == ':')  //遍历字符串s并将其中的符号变为空格
			p = ' ';

你可能感兴趣的:(紫书知识点记录(持续更新))