size_type 和 size_t 的区别

标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下:
string st("The expense of spirit\n");
cout << "The size of "<<st<<"is"<<st.size()
<< "characters, including the newline"<<endl;
那么size()这个函数返回的类型到底是什么呢?一定要记住,绝对不是整形,而是size_type类型的,所以千万不要把size的返回值赋给一个int变量。
那么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

时间: 2024-10-24 05:26:50

size_type 和 size_t 的区别的相关文章

size_type与size_t的机器无关性

1.首先说下这两者之间的区别:sizetype是容器定义的类型,其使用范围在容器内,即命名空间在容器内,如STL中string类有定义string::size_type类型,vector内同样定义有vector<int>:size_type类型,它们的定义并不重复,命名空间不同罢了.而size_t类型的命名空间是全局的命名空间,全局只有一个,不能再次重复定义. 2.那么它们是什么类型呢? 答案是不唯一的,或者说是不确定的.在win32平台下它们的定义都是unsigned int类型,在win6

size_t与size_type区别

size()  标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下: string st("The expense of spirit\n");cout << "The size of "<<st<<"is"<<st.size()<< "characters, including the newline"<<endl; 那么s

【c++】size_t 和 size_type的区别

为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 2. string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int3. 使用的时候可以参考:   string

size_t 和 size_type的区别

为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 2. string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int3. 使用的时候可以参考:   string

size_t和size_type类型

size_t一般用来表示一种计数,比如有多少东西被拷贝等.例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小. 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”.所以,它在数组下标和内存管理函数之类的地方广泛使用. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 string::size_type 制类型一般就是unsigned int, 但是不同机器

string::size_type 页73 size_t 页90

异同点: size_t size_type sizeof(XXX)所得到的结果的类型就是 string类类型和vector类类型定义的类型,string的size操作返回来的是string::size_type类型,不可把string::size_type赋给int. 全局定义的类型,比如用在数组中,for循环中 STL类中定义的类型属性 sizeof(string::size_type) , sizeof(size_t) //size_t单独就行上述长度均相等,长度为win32:4 win64

size_t总结

1.sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t. 若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%u或%lu. sizeof,获取操作数占用的内存空间字节数,返回类型size_t: strlen,获取字符数组实际使用的字节数,不包含数组结尾符'\0',返回类型size_t. 2.它是一种"整型"类型,里面保存的是一个整数,就像int, long那样.这种整数用来记录一个大小(size).s

string.size()和size_type

写一道小题目时发现了一个隐蔽错误,之前也没有在意过.就是string.size()返回的是size_type类型,而size_type等同于unsigned int 那道小题目如下: 当时写的代码如下: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() 6 { 7 int N; 8 string name; 9 int maxsize = -1; 10 string max

c size_t

为了使自己的程序有很好的移植性,C++程序员应该尽量使用size_t和size_type,而不是int,unsigned. size_t 无符号整形,代表系统上的最大int类型. 在标准C/C++的语法中,只有int float char bool等基本的数据类型,至于size_t,或size_type都是以后的编程人员为了方便记忆所定义的一些便于理解的由基本数据类型的变体类型. size_t是为了方便系统之间的移植而定义的,它是一个无符号整型,在32位系统上定义为:unsigned int:在