string::size_type类型

string::size_type类型 string::size_type类型 从逻辑上来讲,size()成员函数似乎应该返回整型数值,或如2.2节“建议”中所述的无符号整数。但事实上,size操作返回的是string::size_type类型的值。我们需要对这种类型做一些解释。 string类类型和许多其他库类型都定义了一些伙伴类型(companion types)。这些伙伴类型使得库类型的使用是机器无关的(machine-independent)。size_type就是这些伙伴类型中的一种。它定义为与unsigned型(unsigned int或unsigned long)具有相同的含义,而且可以保证足够大可存储任意string对象的长度。为了使用由string类型定义的size_type类型,程序员必须加上作用域操作符来说明所使用的size_type类型是由string类定义的。 任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,不要把size的返回值赋给一个int变量。 虽然我们不知道string::size_type的确切类型,但可以知道它是unsigned型(2.1.1节)。对于任意一种给定的数据类型,它的unsigned型所能表示的最大正数值比对应的signed要大一倍。这个事实表明size_type存储的string长度是int所能存储的两倍。 使用int变量的另一个问题是,有些机器上int变量的表示范围太小,甚至无法存储实际并不长的string对象。如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就会超过这个数字。因此,为了避免溢出,保存一个string对象size的最安全的方法就是使用标准库类型string:: size_type。

 

 

 

我定义了vector vec;
然后push_back了3个数,
但为什么
for( vector ::size_type j=vec.size()-1; j>=0; --j )
会出现死循环,一直在刷屏;而
for( int j=vec.size()-1; j>=0; --j )
却是正确的
网友回复:我的完整代码如下:

void vec()
{
vector vec;

vec.push_back(3);
vec.push_back(4);
vec.push_back(5);

cout <
cout <
//for( vector ::size_type j=vec.size()-1; j>=0; --j ) //error
for( int j=vec.size()-1; j>=0; --j ) //ok
{
cout < }
}
网友回复:

C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include 

#include 



using namespace std;



int main()

{

    vector vec;

    vec.push_back(10);

    vec.push_back(11);

    vec.push_back(12);



    for(vector::size_type i=0; i 
   


网友回复:size_type 是无符号整数,当j=0时,做减1操作不会得到-1,而是得到最大的无符号整数,因此永远不会退出循环
网友回复:晕~~~
size_type是unsigned int型的,你这么弄,当j==0之后,j--,那么j理应为-1,但是unsigned属性,让它变为一个正数了,所以会无限循环!!!
网友回复:3楼4楼正解
网友回复:看来我还是下手晚了点儿,哎~~~破网速啊!
网友回复:2楼:可是我的原意是想把vector里的值逆序输出啊,有哪位能给出一个更合理的解决方案呢?
网友回复:3楼、4楼见解很正确,很好地解释了我的困惑。如果能继续给出一个逆序输出vector的方法就更好了
网友回复:rbegin,rend

你可能感兴趣的:(C++)