Primer 三四五章
序言
- 看了看表,再看了看书,2个小时就没啦(又到了吃中饭的时间,O(∩_∩)O哈哈~)。一个上午感觉啥也没干呢,不过还是从书上看到了一些东西,对于这些基础的知识,还是有些东西没有记得很深,所以还是花了许久的时间回味总结。三章内容主要是挑出了自己不是很熟悉和很懂的地方或者是面试中会用到的一些难点来记录。
string类
- 这一章大体上是一些基础,没啥好讲的。就记录一些简单的易忘的东西吧
- string对象的初始化:基本的初始化操作(有点和容器之列的对象类似),但是string对象输入输出操作是不会包含对应的空格的(用cin操作输入string,碰到空格被视为两个单独的字符串)
- string对象的size函数返回的是一个无类型的size_type函数,这个函数很有意思,下面重点介绍一下这个fat girl吧。对了它还有一个孪生兄弟:size_t
- size_type:为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned
由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型.string::size_type它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。与实际机器匹配。
size_t 使用的时候头文件需要 <cstddef> ;size_type 使用的时候需要<string>或者<vector>
string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int
实际上两者之间还是不同的:size_t不是容器概念;size_type是容器概念,没有容器不能使用。#include<iostream>
#include<vector>
using namespace std;
int main()
{
cout<<" typeid(size_t).name() = "<<typeid(size_t).name()<<endl;
cout<<" typeid(vector<int>::size_type).name() = "<<typeid(vector<int>::size_type).name()<<endl; return ;
} - 上面讲了一堆,来总结一下
- 到底什么是size_type类型呢?
- string类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类型中的一种。size_type被定义为与unsigned型(unsigned int, unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。为而来使用由string类型定义的size_type类型。程序员必须加上作用于操作符来说明所使用的size_type类型是由string类定义的。
- 我们为什么不适用int变量来保存string的size呢?
使用int变量的问题是:有些机器上的int变量的表示范围太小,甚至无法存储实际并不长的string对象。如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就能超过这个数字,因此,为了避免溢出,保存一个string对象的size的最安全的方法就是使用标准库类型string::size_type().
一点注意:虽然是在学习标准库string的时候巧遇了size_type类型,但是,其实vector库也可以定义size_type类型,在vector库中还有一个difference_type类型,该类型用来存储任何两个迭代器对象间的距离,所以是signed类型的。
- 什么是size_t类型呢?其实本质上和size_type没有多大区别
其实size_t和size_type类似,size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本.它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。用法如下:
bitset<32> bitvec;
size_t sz=bitvec.size();
另外sizeof操作符的返回值的类型也为size_t哦
- 到底什么是size_type类型呢?
- size_type:为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned
标准库vector
对我来说其实这一部分的知识吧,都应该非常熟悉了(主要是还是因为下功夫看了两遍STL源码,加上平时都是比较喜欢用STL的),所以这里就记录一些比较细节的东西。
vector初始化赋值操作(C++11新增):容器类的主要赋值还是那么几类,网上都是有的(一个套路),这次在树上无意看到C++11新增了一种类似数组的赋值方式。
vector<int> res = {"1", "2", ...}
和数组类似的赋值方式也是可行的- 还有就是迭代器的一些指向问题和迭代器的基本加减运算问题也是比较值得注意的(容易出错)。例子的话就不写了,练多了就简单了。
- 多维数组
- 其实这部分内容在C语言学习的时候我就没有很好的弄懂,今天看了这本书感觉又懂了一点,但是主要还是对C++11那个for范围遍历二维数组的处理有了一点更深的认识。
- 比如这个例子:
size_t cnt = ;
for (auto &row : is)
for (auto &col : row){
col = cnt;
++cnt;
}这个例子是用auto进行遍历的二维数组,is是一个二维的,row表示的是is中每一行的一维数组,col表示的是每个一维数组的元素。这里最主要的是每个auto变量都是引用的形式,这个主要的目的是放置数组直接变成指针了(隐式转换) eg: int a[10] = {0}; int *pt = a; 这样会发生数组变成指针的隐式转换。
- 比如这个例子:
- 其他的内容感觉影响都不是很大,基础了。
- 其实这部分内容在C语言学习的时候我就没有很好的弄懂,今天看了这本书感觉又懂了一点,但是主要还是对C++11那个for范围遍历二维数组的处理有了一点更深的认识。
- 这一章大体上是一些基础,没啥好讲的。就记录一些简单的易忘的东西吧
表达式
- 从这半年多来面试的经验和一些笔试经验看:这方面的面试题比较多(主要还是比较好出题在这里)这里就不多总结了,奉上自己整理的笔记(略渣的笔记,O(∩_∩)O哈哈~)
面试常见题
- 从这半年多来面试的经验和一些笔试经验看:这方面的面试题比较多(主要还是比较好出题在这里)这里就不多总结了,奉上自己整理的笔记(略渣的笔记,O(∩_∩)O哈哈~)
语句
- 这里就主要看了一下异常机制,没有实战过,处理异常的技术还是不行。自己水平有限,这部分还是得看大佬的总结,也写不出什么比书上更好的东西了,就直接借鉴一下别人的博客吧(懒到一种境界)
总结
- 上午大体上也就捣鼓了这么点东西,效率还是太低了,得提升提升效率,加油了。
Primer 三四五章的更多相关文章
- c++ primer plus 第6版 部分三 9章 - 章
c++ primer plus 第6版 部分三 9章 - 章 第9章 内存模型和名称空间 1.单独编译 ...
- C++ Primer 第2章 变量和基本类型
C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- Gradle 1.12用户指南翻译——第三十一章. FindBugs 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十七章. OSGi 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十三章. PMD 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第三十三章:await与signal/signalAll
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第三十一章:中断正在等待显式锁的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- 第四章.使用ant编译hadoop eclipse插件
从hadoop 0.20.203以后,hadoop的发布包里,不再对eclipse插件进行jar包发布,而是给出了打包的代码,需要各位开发人员自己进行打包和设置.我们打的包必须跟自己使用的hadoop ...
- SpringMVC传统风格控制器和基于注解的控制器
SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...
- android:修改PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色
1.修改PagerTabStrip中的背景颜色 我们在布局中直接设置background属性即可: <android.support.v4.view.ViewPager android:id=& ...
- Oracle block 格式
Oracle block 格式 信息参考: http://www.ixora.com.au/ 特别感谢 overtime 大哥对我的无私的帮助和对我一直鼓励支持我的网友这些资料是没得到oracle ...
- 14_java之变量|参数|返回值|修饰符
01java中的文档注释和制作 * A: 在eclipse使用时,可以配合文档注释,导出对类的说明文档,从而供其 他人阅读学习与使用. 通过使用文档注释,将类或者方法进行注释用@简单标注基本信息.如@ ...
- thinkphp5集成微信支付【公众号支付】快捷路径
1 下载官方的测试用例PHP版 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 2 到vendor目录新建weixin文件夹 ...
- Shiro异常处理总结
出自:https://blog.csdn.net/goodyuedandan/article/details/62420120 一.Spring MVC处理异常有3种方式: (1)使用Spring-M ...
- 修改kvm虚拟机镜像大小
修改虚拟机镜像大小(qcow2/raw resize) 创建一个镜像文件,大小1G taw muxueqz@muxueqz /tmp $ qemu-img create -f raw t.raw 1G ...
- 从零玩转JavaWeb系列7web服务器-----表单的提交
在企业开放中如何提交一张表单? 例如:用户注册表 <!--表单内容--> <form action="/28-mystore/regist" id="R ...
- hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)
http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java ...