Dynamic Memory 动态内存 静态内存用于保存局部static对象、类的static成员以及定义在任何函数之外的变量。栈内存用于保存定义在函数内的非static变量。 除了静态内存与栈内存,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap)。 动态内存与智能指针 在C++中,动态内存的管理通过 一对运算符完成:new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们 2019-09-16 C++ C++ Primer RE:从零开始的C++学习 C++
Associative Containers 关联容器 关联容器类型 使用关联容器 使用关联数组的一个典型例子是单词数统计: 123456789// count the number of times each word occurs in the inputmap<string, size_t> word_count; // empty map from string to size_tstring word;whil 2019-09-10 C++ C++ Primer RE:从零开始的C++学习 C++
Generic Algorithm Lambda表达式 对于一个对象或表达式,如果可以对其使用调用运算符,则称它为可调用的。 除函数与函数指针外,还有两种可调用对象:重载了函数调用运算符的类以及lambda表达式(lambda expression)。lambda表达式的基本形式如下: 1[capture list] (parameter list) -> return type { function body 2019-09-06 C++ C++ Primer RE:从零开始的C++学习 C++
Sequential Container 顺序容器概述 顺序容器类型 - 与`vector`、`deque`和`array`相比,`list`和`forward_list`的内存开销更大。 # 容器库概览 - 容器操作 容器定义和初始化 为了创建一个容器为另一个容器的拷贝,两个容器的类型及其元素类型必须匹配。不过,当传递迭代器参数来拷贝一个范围时,不要求容器类型是相同的。而且,新容器和原容器中的元素类型 2019-09-01 C++ C++ Primer RE:从零开始的C++学习 C++
The IO Library IO类 IO库类型和头文件 IO对象无拷贝或赋值 由于不能拷贝IO对象,我们不能将函数的形参或返回类型设为流类型。 条件状态 IO库条件状态 管理输出缓冲 导致缓冲刷新的条件有以下几种: 程序正常结束 缓冲区满 使用endl, flush等操纵符显式刷新缓冲 使用unitbuf操纵符设置流的内部状态,使流在每次输出操作后自动刷新缓冲 一个输出流A可以关联到另一个流B,此时读写 2019-08-29 C++ C++ Primer RE:从零开始的C++学习 C++
Classes 定义抽象数据类型 成员函数必须在类的内部声明,可以在类的内部或外部定义。定义在类内部的函数是隐式的inline函数。 调用成员函数时,this被初始化为调用成员函数的对象的地址。普通成员函数的this为指向非const对象的const指针,const成员函数的this为指向const对象的const指针。 const对象以及指向const对象的引用或指针只能调用对象的const成员函数。 构造 2019-08-27 C++ C++ Primer RE:从零开始的C++学习 C++
Functions 函数基础 实参(argument)是函数形参(parameter)的初始值。 虽然实参与形参存在对应关系,但C++对实参的求值顺序没有保证。 形参名是可选的,某些情况下函数的某些形参是未被用到的,此类形参通常不命名以表示在函数体内不会使用它。函数调用必须为每个形参提供实参,即使这个形参不会被用到。 函数的返回值不能为数组或函数类型,但可以是指向数组或函数的指针。 局部对象 只存在于块执行期间的对 2019-08-19 C++ C++ Primer RE:从零开始的C++学习 C++
Statements switch语句 c++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置。12345678910case true: // this switch statement is illegal because these initializations might be bypassed string file_name; // error: control bypass 2019-08-09 C++ C++ Primer RE:从零开始的C++学习 C++
Expressions 基础基本概念 当我们使用重载运算符时,操作数的类型以及运算的结果都取决于运算的定义;然而,操作数的个数以及运算符的优先级和结合性都是无法改变的。 C++中所有的表达式都是右值(rvalue)或是左值(lvalue),这两个概念继承自C语言,原本是为了帮助记忆:左值可以放在赋值语句左侧,而右值不能(在C++中有所区别)。 通常,我们使用一个右值时,使用的是对象的值(内容);我们使用一个左值时,使用的 2019-08-07 C++ C++ Primer RE:从零开始的C++学习 C++
Strings, Vectors, and Arrays string类型string的定义与声明 初始化string的方法 当我们使用=初始化一个变量时,编译器将=右边对象的内容复制到新创建的对象,以进行拷贝初始化。当我们省略=时,进行的是直接初始化。 string上的操作 string的size方法返回一个string::size_type类型的值,该类型是unsigned类型。 可以将字符字面量和字符串字面量转化为string,将st 2019-07-18 C++ C++ Primer RE:从零开始的C++学习 C++