您的位置:首页 > 编程语言 > C语言/C++

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。
例如:  

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之间的比较运算


其他运算均不合法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: