学习笔记,C++学习笔记-00

近日开始学习C++。读的书有《Accelerated c++》(中、英),并且备着一本《c++ primer 4th》备查阅。
以下是我的读书笔记。楷体是我的注释,红色标记为我认为的注意点。
  1. 两个字符串字面值之间不能用操作符 '+' 来进行连接。如:”helo”+ ”world”是不正确的. 在有些语言中这样的操作是合法的。如:AS3。
  2. 输入输出缓冲区的概念。 输入到计算机的会被存到输入缓冲区中,cin会读取输入缓冲区的内容,但cin只保存直到遇到第一个空白符的连续的值。然后刷新缓冲区,缓冲区将cin存取的值在缓冲区里删除。当cout时,会读取输出缓冲区的值,当遇到endl时,会刷新输出缓冲区,使系统立刻向cout里写入输出 数据,从而显现出来。 有点类似K&R那本书里到的getch()函数,设置一个输入buffer。 例如: 1 std::cin >> name; //input "tim woo" 2 std ::cout << name <> name;// no ask input, buffer is not empty, cin will read from buffer("woo") 4 std::cout >> name >> std::endl; //output "woo"
  3. 函数的参数:值,引用,常量引用
    1. “值”就是普通的传递形式(和C一样),参数就是对原来数据值的一份copy(相当于在内存中又开辟了区域来备份),然后这个copy可在函数体被修改,但一旦退出函数,这个copy将会从内存中清除。
    2. “引 用”就是传递原来数据的一个引用(类似于指针,“引用”本身不保存“值”,但知道“值”在内存的哪里被保存,通过引用我们可以找到值,继而修改“值”)。 所以引用只是原来数据的一个“别名”,任何对引用的操作都可以直接作用于原来的数据值。所以,可以通过参数传递引用,来达到一个函数返回多个变量的效果。 (类同C的传指针参数)
    3. “常量引用”即用const关键字修饰的引用类型,由于是const修饰的,所以其保证了引用指向的值不可以在函数内被修改,从而可达到类同于传值的效果(只要这个值在函数周期内不被修改),然而相对于传值拥有了不必完全copy“值”的高效率。
  4. 迭代器 iterator, const_iterator, const iterator 迭代器iterator的作用类似于指针。
    1. iterator只有针对制定<类型>的容器才有效。例如: 1 vector vec; 2 vector::iterator itr;
      对于vec来说,itr.begin()指向的是vec的第一个元素。Itr.end()指向的是vec的最后一个元素的下一个元素(作为哨兵,实际不存在)。可用itr.begin() == itr.end()来判断容器是否为空。 像指针一样,itr可以++,*itr表示解引用,即表示容器内被itr指向的元素。
    2. const_iterator为一种迭代器,这种迭代器可以读取其指向的内容,也可以自增,但是不可以对其指向的内容进行“写“操作。 例如: 1 vector::const_iterator constItr = vec.begin(); 2 cout<< *constItr << endl; //正确 3 constItr++;//正确 4 *constItr = 10;//错误!
      另外,由于const_iterator只可读取其指向的内容,所以可以用const_iterator作为const 的 容器的迭代器。
    3. 容易混淆的 由const 修饰符修饰的iterator 其几乎无作用。 与普通的iterator一样,其可以解引用,并可以修改其指向的内容。但迭代器本身不可被修改,因为它由const修饰。 所以该iterator不能自增,其只能为第一次赋予的值,故并无明显的作用。
P.S:合法的指针运算:
  1. 相同类型指针之间的赋值运算
  2. 指针同整数之间的加减法运算
  3. 相同类型指针之间的减法和比较运算
  4. 将指针赋值为0 或 指针与0之间的比较运算
其他运算均不合法
Tags:  教师学习笔记 java学习笔记 学习笔记

延伸阅读

最新评论

发表评论