第三章 标准库类型

1.string对象比较操作是区分大小写的,即同一个字符的大小写形式被认为是两个不同的字符;

Using namespace std;

Using std::cin;

两种using的使用方法;

String类型的输入操作符:

读取并忽略开头的所有的空白字符(空格、换行、制表符),读取字符直到再次遇到空白字符。

While(cin>>s)死循环,一直读入字符;

Getline(输入流对象,string对象)可以读取中间带空格的字符串;返回的字符串会丢掉原来行尾的换行符,需要自行添加。

String 对象和字符串字面值混合连接操作时,+两侧必须要有一个是string对象;连续出现+时,string对象在左侧,按照从左至右的顺序进行运算。

String的操作函数.size()返回值类型是unsigned的string::size_type类型。

String对象中的字符获取可通过下标获取;

  1. 一个容器中的所有对象都必须是同一种类型的;

Vector是一个类模板,创建vector对象时候,需要说明类模板的数据类型:vector<int> vect_int;

Vector类型总是包括vector的元素类型;vector<int>::size_type h;

Vector的下标只能用来获取已经存在的元素,不能用做元素添加的功能使用;

V.Push_back(value)用作添加元素

3. 所谓的“缓冲区溢出”错误就是对不存在的元素进行下标操作的结果;

4.迭代器是一种检查容器内元素并遍历元素的数据类型,因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的vector类型也是这样;

5.每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值;注意和const iterator进行区分,这个是指所指向的地址为const,既一直指向容器的固定位置;

6.任何改变vector长度的操作都会是以存在的迭代器失效;

7.在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值;

8.从string对象读入位集的顺序是从右向左;

9.string对象和bitset对象之间是反向转化的:string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)。

第四章 数组和指针

1.如果没有显式提供元素初值,则数组元素会像普通变量一样初始化:

在函数体外定义的内指数组,其元素均初始化为0;

在函数体类定义的内置数组,其元素无初始化;

不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组元素提供显式初始化;

数组维数必须用值大于等于1的常量表达式定义。此常量表达式只能包含整型字面值常量,枚举常量或者其他用常量表达式表达初始化的整型const对象。

例如:const unsigned arrray_size=3;

Int ir[array_size]={1,2,2};

一个数组不能由另外一个数组初始化,也不能将一个数组赋值给另一个数组;

下标访问数组元素,所属类型为size_t;

防止下标越界产生的缓冲区溢出;

1指针是指向某种类型对象的复合数据类型,适用于数组的迭代器;每个指正都有个数据类型,该数据类型决定了指针指向对象的数据类型;

3.C++语言无法检测指针是否未被初始化,也无法区分有效地址和由指针分配到的存储空间中存放的二进制位形成的地址;

4.指针只能初始化或赋值为0值常量表达式(std::NULL);类型匹配的对象地址;另一对象末的下一地址;同类型的另一有效指针;

5. C++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址;

6. void*指针只支持几种有限的操作:与另一个指针进行比较:向函数传递void*指针或从函数返回void*指针;给另一个void*指针赋值;不允许使用void*指针操纵它所指向的对象;

7.允许把非const对象的地址赋给指向const对象的指针;

8.可以修改const指针所指向的值,不能保证指向const的指针所指对象的值一定不能修改;

9. 可以把指向const的指针理解为“自以为指向const的指针”;

10.任何企图给const指针赋值的行为(即使给原指针赴会同样的值)都会导致编译时的错误;

举例如下:

  1. 11C风格字符串是以空字符null结束的字符数组;

Cstring实现在c++中操作c风格字符串;

标准函数库strncat、strncpy比strcat、strcpy更安全(内存大小导致的泄漏);尽可能使用标准库string;

12.与数组变量不同,动态分配的数组将一直存在,直到程序显式释放它为止;

13. 每一个程序在执行时都占有一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆;

14.可以使用跟在数组长度后面的一对空圆括号,对动态分配的数组元素做值初始化;

15. 如果我们在自由存储区中创建的数组存储了内置类型的const对象,则必须为这个数组提供初始化,唯一的方法是对数组做值初始化;

16. C++允许定义类类型的const数组,但该类类型必须提供默认构造函数;

17.调用new动态创建长度为0的数组是合法的;用new创建长度为0的数组时,new返回有效的非零指针。该指针与new返回的其他指针有所不同,它不支持解引用操作,因为毕竟没有指向任何元素,但可以进行比较操作,可以进行加减零值或减去自身得到零值。

Delete [ ] name_of_pointer;释放new动态创建的数组,缺少[],编译器不报错,但是运行会导致内存泄漏,运行出错

18.可使用C风格字符串对string对象进行初始化或赋值;

string类型的加法操作需要两个操作数,可以使用C风格字符串作为其中的一个操作数,也允许将C分隔字符串用作复合赋值的右操作数;

在要求C风格字符串的地方不可直接使用标准库string类型对象;

标准库string提供了函数c_str,实现将string对象转变成C风格字符串数组并以null结尾的数组首地址指针;

19.严格来讲,C++中没有**数组,通常所指的**数组其实就是数组的数组;

20.如果表达式只提供了一个下标,则结果获取的元素是该行下标索引的内层数组;

21.定义指向多为数组的指正,其实就是指向数组的数组,指向第一内层的数组的指针,

例如:数组为 T name_of_array[row_size][col_size]

则定义的指针为 T (*name_of_pointer)[col_size]; name_of_pointer=name_of_array;

C++ Primer学习笔记(二)相关推荐

  1. C++Primer学习笔记(二)

    17.string对象中字符的处理: cctype头文件中定义: isalnum(c) 如果c是字母或数字,则为true isalpha(c) 如果c是字符,则为true iscntrl(c) 如果c ...

  2. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  3. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  4. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  5. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  6. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  7. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  8. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

  9. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  10. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

最新文章

  1. Silverlight中文件的生成操作与其对应的获取方法
  2. jupyter notebook 内核好像挂掉了
  3. textarea 自适应窗口|IE、firefox 显示同样的效果
  4. 跨域请求设置withCredentials
  5. AQS独占式同步队列入队与出队
  6. 练习利用LSTM实现手写数字分类任务
  7. 扩散(信息学奥赛一本通-T1437)
  8. 敏捷开发_敏捷开发和迭代开发的异同分析
  9. @scheduled 执行一次_Spring Boot 定时任务 @Scheduled
  10. 电子电路分析与设计:数字电子技术_红外气体传感器电子电路设计
  11. :《我相信》腾讯QQ vs 360决战版
  12. nosql第二章课后习题
  13. HashTable源码简单介绍
  14. 数据分析sql面试必会6题经典_经典SQL面试题及答案分析
  15. 双网卡上网冲突解决_【优特普.安防百科】交换机组网最常见的8大故障及解决方式...
  16. 2020年终系列:国内区块链专利授权总数不足3000项|链塔智库
  17. 使用python 批量修改图片分辨率
  18. 巧用CSS文件愚人节恶搞
  19. waves服务器系统盘,Waves Soundgrid服务器(DIY)
  20. 如何申请email账号注册,如何批量注册申请邮箱?

热门文章

  1. 12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h
  2. mysql 过程 中文_mysql中文插入和查询过程
  3. shuang xiang chong ding xiang zuo ye
  4. 一位老程序员的通货膨胀教训
  5. php代码数鸡蛋数学题,给定一个数字求1的个数
  6. 计算机等级一级考试题多选,计算机一级考试理论试题:第二部分 多选
  7. arcgis自动完成面怎么用_ArcGIS实践教程(35)ArcGIS/ArcMap面文件的分割
  8. ERC1155实践|区块链游戏的平行宇宙和为此而生的Enjin钱包
  9. 相机闪存卡数据恢复方法/数码相机误删照片恢复详解
  10. 2022年如何学会成为一名Android开发