为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned
size_t是全局定义的类型
在stl中一些类中的函数的返回值是 size_type 但在不同的stl模版类中size_type代表的具体类型可能不一样 。所以在使用到了这一类型还是使vector<T>::size_type 这种模版类自己的类型,不需要关注他的具体到底是什么。
NOTE:要使用size_type,需要首先指定它由哪种类型定义的。vector对象的类型总是包含着元素的类型
vector<string>::size_type //正确
vector::size_type //错误
.size()的类型是size_type
vector<int> a{ 1,2,3,4,5 };
for (vector<int>::size_type i = 0; i < a.size(); i++) {
cout <<"aaaq" <<endl;
}
如果使用int类型的话,会产生一个warning C4018: “<”: 有符号/无符号不匹配
for (int i = 0; i < a.size(); i++) {
cout << "aaaq" << endl;
}
所以我们一般在使用size_type的时候都会在前面加上一句:
typedef vector<T>::size_type size_type;//T表示类型
我们为什么不适用int变量来保存string的size呢?
使用int变量的问题是:有些机器上的int变量的表示范围太小,甚至无法存储实际并不长的string对象。如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就能超过这个数字,因此,为了避免溢出,保存一个string对象的size的最安全的方法就是使用标准库类型string::size_type().