sizeof(Vector<>)大小问题

先来看一个例子:

struct record{
     string name;
     int age;
     vector<int> grades;
};

则sizeof(record)大小为多少?

答案是:20(G++编译器下)

了解string,int的朋友很熟悉,string和int在G++下都是4字节,这样看来 grades的大小应为12字节。

给grades中放入三个整型值,100,110,120,sizeof(grades),竟然还是12!

由此说来,sizeof(vector<type>)的大小,跟容器里面存放多少数据无关,它是在编译期确定的一个值,仅跟具体的编译器有关。

用一段程序测试一下:

cout<<"sizeof(vector<char>) = "<<sizeof(vector<char>)<<endl;
cout<<"sizeof(vector<int>) = "<<sizeof(vector<int>)<<endl;
cout<<"sizeof(vector<short>) = "<<sizeof(vector<short>)<<endl;
cout<<"sizeof(vector<double>) = "<<sizeof(vector<double>)<<endl;
cout<<"sizeof(vector<long>) = "<<sizeof(vector<long>)<<endl;
cout<<"sizeof(vector<float>) = "<<sizeof(vector<float>)<<endl;
cout<<"sizeof(vector<bool>) = "<<sizeof(vector<bool>)<<endl;
cout<<"sizeof(vector<string>) = "<<sizeof(vector<string>)<<endl;

结果如下:

可以看出除了bool类型外,其他类型的容器大小均为12字节,经检测VC6.0下这个值是16,在VS2003以后该值是20.

所以,要想查看一个容器v的大小:

可以使用sizeof(v) + sizeof(T) * v.capacity();//T是v中元素类型

posted on 2012-05-07 14:35  温柔的暴力  阅读(5789)  评论(0编辑  收藏  举报

导航