社区
C++ 语言
帖子详情
stl中的 string 数据结构(实现原理)
lauo
2009-12-21 01:52:02
string是如何实现的呢?
内部数据结构是链表还是数组。
使用链表的好处是,移动复制快。
使用数组是随机访问快。
那么,它到底是如何实现的呢?
...全文
456
18
打赏
收藏
stl中的 string 数据结构(实现原理)
string是如何实现的呢? 内部数据结构是链表还是数组。 使用链表的好处是,移动复制快。 使用数组是随机访问快。 那么,它到底是如何实现的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lauo
2009-12-22
打赏
举报
回复
Ok谢谢诸位了!
wang7391
2009-12-21
打赏
举报
回复
stl中的string是使用的数组, 不过它有一个固定的buffer,好象是16字节的(如果为char,是16个字符,wchar为8个字符), 当字符串的长度>=buffer的长度时,它才为动态分配内存。
eigar
2009-12-21
打赏
举报
回复
ptr和m_length为成员
eigar
2009-12-21
打赏
举报
回复
是用动态分配数组实现的,主要用到重载操作符。
成员只有char * 和长度即可。
有的书上介绍了简单的实现,c++ primer plus 。
所谓的实现原理就是把传进来的参数赋值给成员char *
class CString
{
public:
void operator=(const char *str)
{
m_length = strlen(str);
if(ptr)
{delete [] ptr;}
ptr = new char[m_length + 1];
strcpy(ptr,str);
};
gbb21
2009-12-21
打赏
举报
回复
[Quote=引用 12 楼 lauo1188 的回复:]
贴吧,我就不信,他会直接用一个 T*data 来实现。那每次我增加一段字符串,str+="adf。。。。"; 它就得新申请空间,然后再复制,那多费时间啊!
[/Quote]
必然是数组实现的,因为要兼容C语言的string,而且 += 的操作本来就是很费时间的,虽然不必每次重新分配空间,因为可以预分配
daidodo
2009-12-21
打赏
举报
回复
mark
lauo
2009-12-21
打赏
举报
回复
贴吧,我就不信,他会直接用一个 T*data 来实现。那每次我增加一段字符串,str+="adf。。。。"; 它就得新申请空间,然后再复制,那多费时间啊!
healer_kx
2009-12-21
打赏
举报
回复
嗯,那我把源码贴过来?你还是要看一次。。。
lauo
2009-12-21
打赏
举报
回复
[Quote=引用 9 楼 taodm 的回复:]
如果我认真看过string的源码就直接回答楼主了。
同为懒人的人飘过。
[/Quote]
呵呵,总算遇到个帅哥了!
taodm
2009-12-21
打赏
举报
回复
如果我认真看过string的源码就直接回答楼主了。
同为懒人的人飘过。
lauo
2009-12-21
打赏
举报
回复
[Quote=引用 7 楼 healer_kx 的回复:]
引用 6 楼 lauo1188 的回复:
回三楼:源码真的是这么写的吗?
看源码。。。
[/Quote]
晕,如果我想自己看,我就不麻烦大家了。
healer_kx
2009-12-21
打赏
举报
回复
[Quote=引用 6 楼 lauo1188 的回复:]
回三楼:源码真的是这么写的吗?
[/Quote]
看源码。。。
lauo
2009-12-21
打赏
举报
回复
回三楼:源码真的是这么写的吗?
macrojj
2009-12-21
打赏
举报
回复
请看XSTRING源码
lauo
2009-12-21
打赏
举报
回复
回二楼,自己写过,用的是数组的方式,不过数组是二级的,一级作为索引,二级作为数据存储。
今天又看了下C++的书,还是不明白它标准库是怎么做成的。
healer_kx
2009-12-21
打赏
举报
回复
class basic_string<T>
{
T* buffer;
}
明白不/?
buptzwp
2009-12-21
打赏
举报
回复
这个源代码随便一搜都有,这个最好会自己写string。
lauo
2009-12-21
打赏
举报
回复
有没有人对此比较了解的,或者研究过它的源代码的。不妨指导一下!
【
STL
源代码】C++标准库
STL
源代码下载
【
STL
源代码】
中
包含了许多常用的
数据结构
(如vector、list、map等)和算法(如排序、查找、遍历等)。通过阅读代码可以仔细研究这些
数据结构
和算法的实现,了解它们的内部工作原理和使用方式。
基于C语言实现集合运算【100011964】
对于集合交、并、差等运算的实现比较简单。 为了实现不同类型数据的集合运算,需要使用
string
类型,
string
类是
STL
中
封装好的类...但需要对
STL
中
容器操作的使用和原理较为熟悉,才能定义高效实用且符合要求的
数据结构
。
STL
中
string
类的实现(细节避坑)
C++
中
的
string
怎么实现?进来你就知道了~ 实现的功能总览: 构造函数 拷贝构造函数(传统写法和现代写法) 析构函数 按下标访问或修改 赋值操作(传统写法和现代写法) 尾插pushback 加等字符和加等...
stl
容器的
实现原理
-与
数据结构
的对应关系
STL
容器的
实现原理
STL
共有六大组件 ...其实,
STL
的实现也是基于我们常见的
数据结构
. 序列式容器: vector-数组,元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组
中
。
【C++】
STL
之
string
类的模拟实现
STL
的
string
模拟实现,帮助了解其底层原理
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章