美文网首页
size_type和size_t

size_type和size_t

作者: 棉花糖7 | 来源:发表于2020-06-29 11:27 被阅读0次

    size_t不是容器概念,不是容器时,就用它。就有可移植性

    size_type是容器概念,用于表示容器长度,没有容器不能使用。 是STL定义的


    size_type:

            由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型

      string抽象意义是字符串, size()的抽象意义是字符串的尺寸, string::size_type抽象意义是尺寸单位类型

     string::size_type它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。与实际机器匹配。

    例子:

      string::size_type从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。 例如:我们在使用 string::find的函数的时候,它返回的类型就是 string::size_type类型。而当find找不到所要找的字符的时候,它返回的是 npos的值,这个值是与size_type相关的。

    假如,你是用 string s; int rc = s.find(.....); 然后判断,if ( rc == string::npos ) 这样在不同的机器平台上表现就不一样了。如果,你的平台的string::size_type的长度正好和int相匹配,那么这个判断会侥幸正确。但换成另外的平台,有可能 string::size_type的类型是64位长度的,那么判断就完全不正确了。 所以,正确的应该是: string::size_type rc = s.find(.....); 这个时候使用 if ( rc == string::npos )就会正确了。


    size_t

     size_t的引入增强了程序在不同平台上的可移植性。size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。

    它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。

    经测试发现,在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。

    size_t是为了方便系统之间的移植而定义的。(它就是一个无符号整型,有木有!!!)

    在32位系统上定义为 unsigned int    更准确的说法是在32位系统上是32位无符号整型

    在64位系统上定义为 unsigned long    在64位系统上是64位无符号整型

    size_t    一般用来表示一种计数,比如有多少东西被拷贝等。所以,它在数组下标和内存管理函数之类的地方广泛使用

    sizeof    操作符的结果类型是size_t,

    例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。

    vector使用的下标实际也是size_t,源码是typedef size_t size_type。

    因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。size_t类型通常用于循环,数组索引,大小的存储和地址运算。

        其实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 0;

    }


    相关文章

      网友评论

          本文标题:size_type和size_t

          本文链接:https://www.haomeiwen.com/subject/gdhofktx.html