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 ...
- toString()和toLocaleString()的区别
在数字转换成字符串的时候,并没有感觉这两个方法有什么区别,如下: 1 2 3 4 5 6 7 8 var e=123 e.toString() "123" e.toLo ...
- Julia - 三元运算符
三元运算符的格式: a ? b : c a 是条件表达式,如果条件 a 为真,就执行 b:如果条件 a 为假,就执行 c 二选一 julia> println(1 < 2 ? " ...
- 深入浅出 Java Concurrency (12): 锁机制 part 7 信号量(Semaphore)
Semaphore 是一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能 ...
- django之设置分页
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...
- C链表
结构指针的应用,链表处理 1,链表的概念 链表是将若干数据项按一定规则连接起来的[数据类型]表,链表中的每一个数据称为一个节点,既链表是由称为节点的元素组成的,节点多少根据需要确定. 链表连接规则: ...
- 温故而知新-WebSocket 教程
一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有 ...
- 版本控制git之二-分支
有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量, ...
- Halcon学习之八:图像区域叠加与绘制
版权声明:本文为博主原创文章,未经博主允许不得转载. overpaint_gray ( ImageDestination, ImageSource : : : ) 将灰度值不相同区域用不同颜色绘制到 ...
- django -- url (模版语言 {% url 'test1' param1=5 param2=6 %})
如果想让form表单提交的url是类似 action="/index-5-6.html" 这样的,可以在html模版语言中使用{% url 'test1' param1=5 par ...