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

C++学习笔记1:size家族有关的种种杂记

2014-05-16 09:37 246 查看
陆陆续续的学习c++,可以说是小白,也只是把C++ primer中的内容照搬过来当成一个总结。

1:string的size操作

首先翻阅到跟size有关的C++primer书中记载的是string的size操作。

书中提到:size用来获取string对象的长度

e.g.

int main()

{

string st(”the expense of spirit\n“);

cout << st.size() <<endl;

}

简单的说呢:这地方的size就是size(),这是一个”函数“,就是一个获取长度的一个操作。

那基本上从广义上来说,是一个函数,就应该有返回类型,即使是void(姑且把它当做一种返回类型,叫法错误,只是便于理解),

由于有返回类型便再次延伸出了个string::size_type的类型。

对于这里的size_type类型:于是翻阅网上的一些资料(主要来自于百度)。是这么阐述的:由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型。

读着读着,然后在vector对象的size里面又看到,丫的说明了:使用size_type时,必须指出该类型在哪定义的。

vector<int>::size_type

什么地方可以用它呢?当我们遍历容器内元素的时候,是不是要用到长度啊?用到了长度是不是有size操作,那这种类型就有用途了。

好吧,可以这么理解吧:它是一个类型,在string和vector中才能用到,用于保存对象长度的。(目前我也只能懂这么一点,等我学的更多了再着重分析)

2.标准库中bitset中的size

简单的啰嗦下:标准库提供了bitset类简化了位集的操作。bitset的对象也有关于size的操作:b.size()【b中二进制位的个数】

3.sizeof 操作符

sizeof操作符的作用是返回一个对象或类型名的长度。【尼玛,是不是太熟悉了,这丫的不就是size(),可是人家是函数,你丫是操作符啊!!!】

操作符?操作符?操作符? 操作?size()也是操作啊?那就有返回类型:size_t。

请问size_t和size_type有嘛关系啊?是不是同一个人啊?尼玛,我才学啊,我哪知道。

描述:sizeof有三种语法方式:

sizeof(type name);

sizeof(expr);

sizeofexpr;

什么是size_t类型呢?其实本质上和size_type没有多大区别

其实size_t和size_type类似,size_t类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本.它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小

简单的说size_t 没有容器的概念,size_type有容器的概念。

后期更新:更新的内容是源于面试中关于sizeof的考察问题,在这地方进行一个说明和总结:
















上述所涉及到以下几种类型:

(1)char * ss1 是一个字符指针,对于一个字符指针而言,指针的大小事4个字节,所以sizeof(ss1)是4个字节

(2)char ss2[]是一个字符数组,数组最初没有指定大小,那么就由其填充的填充值来决定,于是10个字符占用十个字节,再加上隐含的“\0”,所以式11个字节。

(3)char ss3[100],数组最初指定了100个字节的大小 所以是100;

(4)ss4是整型数组,也是分配了100,由于每个整型变量占4个字节,所以大小总共是400字节。

(5)q1与ss2类似,占用4个字节

(6)q2里面\n算一个字节,所以总共是3个字节

(7)q3是字符指针,指针的大小是定值,占4个自己

(8)(9)这主要考察的是结构体的长度问题。关于结构体长度的问题,在默认情况下,为了方便结构体内元素的访问和管理,当结构体内的元素长度都小于处理器的位数的时候,便以结构体里面最长的数据元素为对齐单位,也就是说结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在长度大于处理器位数的元素,那么就以处理器的位数为对齐单位。

所以sizeof(A)而言,结构体A中有3个short类型变量,各自取2字节对齐,结构体对齐参数按默认的8字节对齐,则a1、a2、a3都去2字节对齐,sizeof(A)为6,其也是2的整数倍。

B中a1为4字节对齐,a2为2字节对齐,结构体大小为6字节,6不是4的整数倍,补空字节,增到8时,符合条件。所以sizeof(B)为8(这地方其实涉及到了CPU优化和内存对齐的问题。关于内存中数据对齐的问题,在之后的章节会详细介绍。另外对于不同数据类型占用多少字节的问题,也会在之后的章节中详细介绍。)

4:关于容器等size操作

关于容器等相关的一些size操作再此就不赘述了,简单以顺序容器中对容器大小的操作位例来说:

其返回类型都是size_type类型:c.size/c.max_size/等,这些具体的一些操作在实际运用中使用而已
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: