c++学习笔记二
引用
引用为对象起了另外一个新的名字,引用类型引用另外一种类型通过&d
的形式来定义引用类型,其中d是声明的变量名。
引用并非对象,相反的它只是为一个已经存在的对象所起的另外一个名字。
引用必须被初始化
指针
指针可以实现对其他对象的间接访问,指针本身就是一个对象,允许对指针赋值、拷贝。
用数据类型 *b
来定义指针,b为指针变量。
指针存放某个对象的地址,用&
来获取地址。
auto类型
在编程时常常需要把表达式赋值给常量,这就要求在声明变量时知道数据类型,但要做到这点并不容易,auto类型能让编辑器去替我们分析所属类型。
decltype
其作用是选择并返回方法的返回值数据类型,在此过程中编译器分析并得到数据类型,但并不计算方法。
1 | //sum的数据类型就是f()的返回值类型 |
string
string表示可变长的字符序列,使用时需包含string的头文件,string定义于std中。
初始化 | 介绍 |
---|---|
string s1 | 默认初始化,s1为空串 |
string s2(s1) | s2为s1的副本 |
string s3(“value”) | s3为value的副本 |
string s3=”value” | 等价与s3(“vaiue”) |
string s4(n,’c’) | s4初始化为由n个字符’c’组成的串 |
操作 | 介绍 |
---|---|
os<<s | 将s写到输出流os中,并返回os |
is>>s | 从is中读取字符串赋给s,字符串以空格结束,并返回is |
getline(is,s) | 从is中读取一整行赋给s,并返回is |
s.empty() | s为空返回true,否false |
s.size() | 返回字符串中字符的个数 |
s.insert(pos,args) | 在pos之前插入args指定的字符,pos可以是一个下标或迭代器,接受迭代器的版本返回指向第一个插入字符的迭代器 |
s.erase(pos,len) | 删除从pos位置开始的len个字符,若len被省略则删除pos到s末尾的所有字符。返回一个指向s的引用 |
s.find(age) | 查找s中args第一次出现的位置,返回下标,若未找到则返回npos |
s[n] | 返回s中第n个字符的引用,位置n从0计起 |
s1+s2 | 返回s1与s2拼接后的字符串 |
s1=s2 | 用s2的副本代替s1中原来的字符 |
s1==s2 | 若相同返回true,否false |
s1!=s2 | 与上条相反 |
<,<=,>,>= | 利用字符在字典中的顺序进行比较,大小写敏感 |
vector
表对象的集合,其中所有的对象的类型都相同,或被称为容器。
初始化 | 介绍 |
---|---|
vector<T> v1 | v1为空vector,为T类型,执行默认初始化 |
vector<T> v2(v1) | v2中包含有v1所有元素的副本 |
vector<T> v3(n,val) | v3中包括n个重复的val |
vector<T> v4(n) | v4包含了n个重复的执行了初始化的对象 |
vector<T> v5{a,b,c,…} | v5包含了初始值个数的元素 |
vector<T> v5={a,b,c,…} | 同上条 |
操作 | 含义 |
---|---|
v.empty() | v中不含元素反回真,否则为假 |
v.size() | 返回元素个数 |
v.push_back(t) | 向v末端添加一个为t的元素 |
v[n] | 返回v中第n个位上的引用 |
v1=v2 | 用v2中元素的拷贝替换v1中的元素 |
v1={a,b,c,…} | 用列表中元素拷贝替换v1中的元素 |
v1==v2 | v1和v2相等为真 |
v1!=v2 | 与上条相反 |
<,<=,<,<= | 以字典顺序进行比较 |
迭代器iter
可以用下标运算符来访问string,还另外有一种更通用的机制也可以实现相同的目的,这就是迭代器。
操作 | 介绍 |
---|---|
*iter | 返回迭代器iter所指元素的引用 |
iter->men | 获取该元素名为men的成员 |
++iter | 令iter指向下个元素 |
–iter | 令iter指向上个元素 |
iter1==iter2 | 判断两个迭代器是否相等 |
iter1!=iter2 | 与上条相反 |
v.begin() | 返回指向v开始元素的迭代器 |
v.end() | 返回指向v结束元素的迭代器 |
iter1-iter2 | 返回两个迭代器相差的距离 |
参考资料
C++primer中文版(第五版) 电子工业出版社。