`
rollstone
  • 浏览: 37180 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++中string对象的大小

 
阅读更多
《C++Primer》里说了:
string类型支持长度可变的字符串。C++标准库将负责管理与相关的内存,以及提供各种有用的操作。

由此可见,string类型的大小应该是动态可变的,不够的时候可能会扩增,扩增和max_size(),string::size_type的关系我也不是很清楚。

string里有max_size()方法可以查看string对象可以保持的最大字符数。
size()方法和length()方法等效,返回string对象所保持的字符数。
// comparing size, length, capacity and max_size
#include <iostream>
using namespace std;

int main ()
{
  string str ("Test string");
  cout << "size: " << str.size() << "\n";
  cout << "length: " << str.length() << "\n";
  cout << "capacity: " << str.capacity() << "\n";
  cout << "max_size: " << str.max_size() << "\n";
  return 0;
}
输出:
size: 11
length: 11
capacity: 11
max_size: 1073741820

这个max_size大概等于1G。
这个结果和c++reference不一样,特别是capacity的值,不太理解,不知道为什么。
我是用g++编译的。
http://www.cplusplus.com/reference/string/string/max_size/




string里size()函数返回的是string::size_type类型。
<<c++primer>>里说:
我们不知道string::size_type的确切类型,但是可以知道是unsigned类型的。
可以用代码测试:
#include<iostream>
#include<limits>
using namespace std;
int main()
{
 cout<<"max string ="
      <<numeric_limits<string::size_type> ::max()<<endl;
  cout<<"max int ="
      <<numeric_limits<int>::max()<<endl;
  cout<<"max unsigned int ="
      <<numeric_limits<unsigned int>::max()<<endl;

}
输出:
max string =4294967295
max int =2147483647
max unsigned int =4294967295


4294967295个字节,大概等于4G。
当然这是32位机器的情况。

这两个测试都没有包含  #include<string>
搜了下,发现这是个不好的习惯,不同的STL平台实现不同,还是应该加上

http://topic.csdn.net/t/20051213/12/4456074.html

查看库文件在/usr/include/c++/4.4里,就是编译器安装目录的某个文件夹里。
分享到:
评论

相关推荐

    详解C++ string字符串类

    C++字符串string类 在C语言里,字符串是用字符数组来表示的,而对于应用层而言,会经常用到字符串,而继续使用...字符串数组和string对象尽量不要混合使用,会带来意想不到的问题 例如,通过字符串数组赋值给string对象: st

    C++使struct对象拥有可变大小的数组(详解)

    首先摘录《Inside The C++ Object Model》中的一段话: 把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组: struct mumble { char pc[1]; }; //获取一个字符串,然后为...

    C++ Primer第四版【中文高清扫描版】.pdf

    3.2.4 string对象中字符的处理 76 3.3 标准库vector类型 78 3.3.1 vector对象的定义和初始化 79 3.3.2 vector对象的操作 81 3.4 迭代器简介 83 3.5 标准库bitset类型 88 3.5.1 bitset对象的定义和初始化 88 3.5.2 ...

    吉林大学2016年c++期末考试题详解

    1. 在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,...

    新手学习C++入门资料

    标准C++的iostream类库中包括了可以支持宽字符的类和对象。用wout替代cout即可。 #include iostream.h int main() { wchar_t wc; wc='b'; wout; wc='y'; wout; wc='e'; wout; return 0; } 说明一下...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     3.2.3 处理string对象中的字符 81  3.3 标准库类型vector 86  3.3.1 定义和初始化vector对象 87  3.3.2 向vector对象中添加元素 90  3.3.3 其他vector操作 91  3.4 迭代器介绍 95  3.4.1 使用迭代器 95  ...

    C++入门到精通

    第 3 章介绍了C++语言预定义的内置和复合数据类型 以及 C++标准库提供的 string complex vector 类数据类型 这些类型构成了所有程序的基石 第 4 章详细讨论了 C++语言 支持的表达式 比如算术 关系 赋值表达式 ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     3.2.3 处理string对象中的字符 81  3.3 标准库类型vector 86  3.3.1 定义和初始化vector对象 87  3.3.2 向vector对象中添加元素 90  3.3.3 其他vector操作 91  3.4 迭代器介绍 95  3.4.1 使用迭代器 95  ...

    C++MFC教程

    更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。(但我个人认为了解系统原理对开发很有帮助) 正因为MFC是建立在C++的...

    [java]读书笔记整理:一切都是对象

    然而,s指向的String对象仍然继续占据内存空间。在这一小段代码中,我们似乎无法再访问这个对象,因为对它唯一的引用已超过了作用域的范围。[后续在说,在程序执行过程中,怎样传递和赋值对象引用]。 事实证明,由...

    最新名企标准通用C++面试题,

    这样声明之后,相当于告诉C, 函数const void f(void)是在C++语言的文件中声明或者实现的,c程序可以使用这个C++中的函数了,从而实现C++和c的混合编程。 13、编写一个函数,作用是把一个char组成的字符串...

    dynamic-pool:无锁,线程安全,动态大小的对象池

    无锁,线程安全,动态大小的对象池。 该池以初始容量开始,如果没有可用空间,它将根据请求继续创建新对象。 合并后的对象将在销毁后返回到池中(有一项额外规定,可以选择“重置”对象的状态以供重新使用)。 ...

    STL库string类的模拟实现

    2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。 3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型...

    c++ 面试题 总结

    C++面试题 1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的...

    c++中引用和指针的区别和联系

    C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是...6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;type

    C++第一次大作业

    这个作业将让你去练习建立一些简单的类和使用C++的基本功能,包括:封装,引用,动态内存开辟, 简单构造函数和析构函数和const。 下面给的程序片段未经过编译或调试. 做出合理的错误修正是你任务的一部分。 一般的,...

    c/c++课程设计学生成绩管理系统

    共有将近6000行代码,建议使用vs2012或2010便于管理也可使用VC6.0++环境修改运行但查找麻烦,所有的语言没有脱离c和c++,主要采用模块思想,也可以转换成面向对象型的语言,只要将模块函数写进类中。同时学c语言的也...

    C/C++面试题目及解答.doc

    看看格式,再看看大小,应该看出它的含金量,200多页吧,不多。 部分: 1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的? 答案:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个...

    C++STL程序员开发指南【可搜索+可编辑】

    1-1-7 指针声明类型与对象类型相一致.................................. 13 1-1-8 int 与char 不再等价............................................. 13 1-1-9 结构数据类型的变化.................................

Global site tag (gtag.js) - Google Analytics