关于size_t与size_type的一些疑问?

时间:2021-02-19 17:05:43
size_type与机器无关,可否举例说明怎么无关。
size_t   与机器相关,可否举例说明怎么相关。
两者可否相互赋值,如果可以,请说明原因,如果不可以,又为什么。

比如这样:
vector<int> vec(10);
vector<int>::size_type vec_size = vec.size();
我可否用vec_size这样说明数组大小

int *pia = new int[vec_size];

之所以这么问是因为书上有这么段话,
vector使用vector::size_type作为下标的类型,而数组下标的正确类型则是:size_t


9 个解决方案

#1


本质上都是unsigned整型值(比如int, long,long long)。正如你问题中所列出的那样,size_type与机器无关,而size_t与机器有关。

比如在16bit的机器上,size_t就是一个16位的无符号整数,而size_type就可能是一个32bit的无符号整数。

#2


使用size_type总是正确的。

#3


无论在什么机器上,使用什么编译器,只要用STL里面的size_type,就OK

#4


size_t是表示指针的,与多少位操作系统有关,假如操作系统是32位,size_t就是无符号32位的,假如操作系统是64位的,size_t就是无符号64位的。
size_type表示容器长度,与操作系统有关,不用的操作系统可以一样,可以不一样,仅用于表示容器,被定义在STL中。

#5


至于你上面的例子,假如引入容器的头文件和命名空间的话,应该不会报错。
因为编译器会把size_type隐式转化为size_t

#6


如果使用STL,则使用size_type,否则使用size_t。

#7


貌似你的理解有问题,size_type怎么可能跟机器环境无关呢? size_type和size_t都是机器有关的,win32:4 win64:8  ;换言之,win32:unsigned int win64:unsiged long 

#8


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

  2,string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int;   
  3,使用的时候可以参考:
  string::size_type a =123;
  vector<int>size_type b=234;
  size_t b=456;
  4,size_t 使用的时候头文件需要 <tchar.h> ;size_type 使用的时候需要<string>或者<vector>
  5, sizeof(string::size_type)  
  sizeof(vector<bool>::size_type)  
  sizeof(vector<char>::size_type)   
  sizeof(size_t)  
  上述长度均相等,长度为win32:4 win64:8;
  6,二者联系:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t;
   7,记得看下wiki和百度百科
。。。。。
个人整理的,但愿能帮到你

#9


4,size_t 使用的时候头文件需要 <cstddef>【<tchar.h>(_T())】 ;size_type 使用的时候需要<string>或者<vector>更正下

#1


本质上都是unsigned整型值(比如int, long,long long)。正如你问题中所列出的那样,size_type与机器无关,而size_t与机器有关。

比如在16bit的机器上,size_t就是一个16位的无符号整数,而size_type就可能是一个32bit的无符号整数。

#2


使用size_type总是正确的。

#3


无论在什么机器上,使用什么编译器,只要用STL里面的size_type,就OK

#4


size_t是表示指针的,与多少位操作系统有关,假如操作系统是32位,size_t就是无符号32位的,假如操作系统是64位的,size_t就是无符号64位的。
size_type表示容器长度,与操作系统有关,不用的操作系统可以一样,可以不一样,仅用于表示容器,被定义在STL中。

#5


至于你上面的例子,假如引入容器的头文件和命名空间的话,应该不会报错。
因为编译器会把size_type隐式转化为size_t

#6


如果使用STL,则使用size_type,否则使用size_t。

#7


貌似你的理解有问题,size_type怎么可能跟机器环境无关呢? size_type和size_t都是机器有关的,win32:4 win64:8  ;换言之,win32:unsigned int win64:unsiged long 

#8


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

  2,string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int;   
  3,使用的时候可以参考:
  string::size_type a =123;
  vector<int>size_type b=234;
  size_t b=456;
  4,size_t 使用的时候头文件需要 <tchar.h> ;size_type 使用的时候需要<string>或者<vector>
  5, sizeof(string::size_type)  
  sizeof(vector<bool>::size_type)  
  sizeof(vector<char>::size_type)   
  sizeof(size_t)  
  上述长度均相等,长度为win32:4 win64:8;
  6,二者联系:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t;
   7,记得看下wiki和百度百科
。。。。。
个人整理的,但愿能帮到你

#9


4,size_t 使用的时候头文件需要 <cstddef>【<tchar.h>(_T())】 ;size_type 使用的时候需要<string>或者<vector>更正下