Chinaunix
标题:
关于capacity的疑问
[打印本页]
作者:
zwylinux
时间:
2007-03-04 18:33
标题:
关于capacity的疑问
c++ 的string有一个capacity方法,功能是返回当前分配给字符串的新内存块,而,reserve方法让你能够请求内存快的最小长度
c++ Primer Plus书上有个程序这样子的
// str2.cpp -- capacity() and reserve()
#include <iostream>
#include <string>
int main()
{
using namespace std;
string empty;
string small = "bit";
string larger = "Elephants are a girl's best friend";
cout << "Sizes:\n";
cout << "\tempty: " << empty.size() << endl;
cout << "\tsmall: " << small.size() << endl;
cout << "\tlarger: " << larger.size() << endl;
cout << "Capacities:\n";
cout << "\tempty: " << empty.capacity() << endl;
cout << "\tsmall: " << small.capacity() << endl;
cout << "\tlarger: " << larger.capacity() << endl;
empty.reserve(50);
cout << "Capacity after empty.reserve(50): "
<< empty.capacity() << endl;
return 0;
}
~
复制代码
输出是:
Sizes:
empty: 0
small: 3
larger:34
Capacityes:
empty:15
small:15
larger:47
capacity after empty,reserve(50):63
而我的运行结果是
Sizes:
empty: 0
small: 3
larger: 34
Capacities:
empty: 0
small: 3
larger: 34
Capacity after empty.reserve(50): 50
问题1、两次结果不一样,是不是capacity和reserve的结果取决于编译器?
问题2、对于第二次的结果,size和capacity方法计算的结果是一样的,也不大理解。
作者:
lcstudio
时间:
2007-03-04 19:21
不同的stl实现有不同的capacity实现,楼主用的应该是SGI版的stl,sgi的stl有一组alloc模版管理内存分配的事务,所以独立对象就不必考虑内存预分配所以这里的capacity等于实际使用值
作者:
tyc611
时间:
2007-03-04 20:12
标题:
回复 1楼 zwylinux 的帖子
>> 问题1、两次结果不一样,是不是capacity和reserve的结果取决于编译器?
>> 问题2、对于第二次的结果,size和capacity方法计算的结果是一样的,也不大理解。
对,不同编译器实现的库不尽相同,第一种结果表明是采用了预分配方案,而第二种结果表明该库没有采取预分配方案
标准只规定了标准库的实现应当保证:reserve(n)调用后,capacity()返回的大小至少是n(当然可以更大)
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2