C++学习笔记-00
2011-09-22 23:59
253 查看
近日开始学习C++。读的书有《Accelerated c++》(中、英),并且备着一本《c++ primer 4th》备查阅。
以下是我的读书笔记。楷体是我的注释,红色标记为我认为的注意点。
两个字符串字面值之间不能用操作符 '+' 来进行连接。如:”helo”+ ”world”是不正确的.
在有些语言中这样的操作是合法的。如:AS3。
输入输出缓冲区的概念。
输入到计算机的会被存到输入缓冲区中,cin会读取输入缓冲区的内容,但cin只保存直到遇到第一个空白符的连续的值。然后刷新缓冲区,缓冲区将cin存取的值在缓冲区里删除。当cout时,会读取输出缓冲区的值,当遇到endl时,会刷新输出缓冲区,使系统立刻向cout里写入输出
数据,从而显现出来。
有点类似K&R那本书里到的getch()函数,设置一个输入buffer。
例如:
函数的参数:值,引用,常量引用
“值”就是普通的传递形式(和C一样),参数就是对原来数据值的一份copy(相当于在内存中又开辟了区域来备份),然后这个copy可在函数体被修改,但一旦退出函数,这个copy将会从内存中清除。
“引
用”就是传递原来数据的一个引用(类似于指针,“引用”本身不保存“值”,但知道“值”在内存的哪里被保存,通过引用我们可以找到值,继而修改“值”)。
所以引用只是原来数据的一个“别名”,任何对引用的操作都可以直接作用于原来的数据值。所以,可以通过参数传递引用,来达到一个函数返回多个变量的效果。
(类同C的传指针参数)
“常量引用”即用const关键字修饰的引用类型,由于是const修饰的,所以其保证了引用指向的值不可以在函数内被修改,从而可达到类同于传值的效果(只要这个值在函数周期内不被修改),然而相对于传值拥有了不必完全copy“值”的高效率。
迭代器 iterator, const_iterator, const iterator
迭代器iterator的作用类似于指针。
iterator只有针对制定<类型>的容器才有效。例如:
对于vec来说,itr.begin()指向的是vec的第一个元素。Itr.end()指向的是vec的最后一个元素的下一个元素(作为哨兵,实际不存在)。可用itr.begin() == itr.end()来判断容器是否为空。
像指针一样,itr可以++,*itr表示解引用,即表示容器内被itr指向的元素。
const_iterator为一种迭代器,这种迭代器可以读取其指向的内容,也可以自增,但是不可以对其指向的内容进行“写“操作。
例如:
另外,由于const_iterator只可读取其指向的内容,所以可以用const_iterator作为const 的 容器的迭代器。
容易混淆的 由const 修饰符修饰的iterator
其几乎无作用。
与普通的iterator一样,其可以解引用,并可以修改其指向的内容。但迭代器本身不可被修改,因为它由const修饰。
所以该iterator不能自增,其只能为第一次赋予的值,故并无明显的作用。
P.S:合法的指针运算:
相同类型指针之间的赋值运算
指针同整数之间的加减法运算
相同类型指针之间的减法和比较运算
将指针赋值为0 或 指针与0之间的比较运算
其他运算均不合法
以下是我的读书笔记。楷体是我的注释,红色标记为我认为的注意点。
两个字符串字面值之间不能用操作符 '+' 来进行连接。如:”helo”+ ”world”是不正确的.
在有些语言中这样的操作是合法的。如:AS3。
输入输出缓冲区的概念。
输入到计算机的会被存到输入缓冲区中,cin会读取输入缓冲区的内容,但cin只保存直到遇到第一个空白符的连续的值。然后刷新缓冲区,缓冲区将cin存取的值在缓冲区里删除。当cout时,会读取输出缓冲区的值,当遇到endl时,会刷新输出缓冲区,使系统立刻向cout里写入输出
数据,从而显现出来。
有点类似K&R那本书里到的getch()函数,设置一个输入buffer。
例如:
std::cin >> name; //input "tim woo" std ::cout << name <<std::endl;//output "tim" std::cin >> name;// no ask input, buffer is not empty, cin will read from buffer("woo") std::cout >> name >> std::endl; //output "woo"
函数的参数:值,引用,常量引用
“值”就是普通的传递形式(和C一样),参数就是对原来数据值的一份copy(相当于在内存中又开辟了区域来备份),然后这个copy可在函数体被修改,但一旦退出函数,这个copy将会从内存中清除。
“引
用”就是传递原来数据的一个引用(类似于指针,“引用”本身不保存“值”,但知道“值”在内存的哪里被保存,通过引用我们可以找到值,继而修改“值”)。
所以引用只是原来数据的一个“别名”,任何对引用的操作都可以直接作用于原来的数据值。所以,可以通过参数传递引用,来达到一个函数返回多个变量的效果。
(类同C的传指针参数)
“常量引用”即用const关键字修饰的引用类型,由于是const修饰的,所以其保证了引用指向的值不可以在函数内被修改,从而可达到类同于传值的效果(只要这个值在函数周期内不被修改),然而相对于传值拥有了不必完全copy“值”的高效率。
迭代器 iterator, const_iterator, const iterator
迭代器iterator的作用类似于指针。
iterator只有针对制定<类型>的容器才有效。例如:
vector<int> vec; vector<int>::iterator itr;
对于vec来说,itr.begin()指向的是vec的第一个元素。Itr.end()指向的是vec的最后一个元素的下一个元素(作为哨兵,实际不存在)。可用itr.begin() == itr.end()来判断容器是否为空。
像指针一样,itr可以++,*itr表示解引用,即表示容器内被itr指向的元素。
const_iterator为一种迭代器,这种迭代器可以读取其指向的内容,也可以自增,但是不可以对其指向的内容进行“写“操作。
例如:
vector<int>::const_iterator constItr = vec.begin(); cout<< *constItr << endl; //正确 constItr++;//正确 *constItr = 10;//错误!
另外,由于const_iterator只可读取其指向的内容,所以可以用const_iterator作为const 的 容器的迭代器。
容易混淆的 由const 修饰符修饰的iterator
其几乎无作用。
与普通的iterator一样,其可以解引用,并可以修改其指向的内容。但迭代器本身不可被修改,因为它由const修饰。
所以该iterator不能自增,其只能为第一次赋予的值,故并无明显的作用。
P.S:合法的指针运算:
相同类型指针之间的赋值运算
指针同整数之间的加减法运算
相同类型指针之间的减法和比较运算
将指针赋值为0 或 指针与0之间的比较运算
其他运算均不合法
相关文章推荐
- Effective C++ 学习笔记 00 概述
- C++学习笔记:文件I/O v0.03
- 【C++】学习笔记草稿版系列9(指向类成员的指针)
- 学习笔记【1】——C++中"\n"与endl的区别是什么?
- (c/c++学习笔记四)指针基础
- C++ map学习笔记
- 【C++】【学习笔记】【005】输入输出小结
- c++ 与 数据结构的学习笔记---欢迎大家指点
- C++学习笔记-----存在多态调用时,为基类定义虚析构函数
- C/C++ 学习笔记:C++ 中 string 类使用总结
- 笔记:C++学习之旅---关联容器
- c++学习笔记-文本查询程序
- C++学习笔记1--基础知识
- C++中的类型转换学习笔记
- 【C++】【学习笔记】【006】函数的重载
- c++学习笔记(五)
- C++学习笔记(1)——基类、派生类的对象空间
- C++ primer plus 第五版 学习笔记 5章7题
- C++学习笔记--标准库类型(vector,iterator,bitset)(三)
- C++学习笔记 -- 虚析构函数与纯虚析构函数