请问一个操作char*的问题?
我申请了一块char * buf = (char*)malloc(1024);
我需要频繁的在buf中插入数据、添加或者删除,如果buf长度不够自动增长。
但是有一个问题,我每次插入数据的时候就需要把原来的数据后移动,这样就会频繁操作内存块,请问有没有什么高效的方法降低内存的频繁操作!
[解决办法]
可以用stl的vector或list
[解决办法]
频繁的插入删除,为什么不用链表结构??
如果实在这样的话可以从尾部开始存放,然后记录存在什么地方了。等到内存不够用的时候扩容,并把数据后移。
[解决办法]
分大点不就好了?并且为啥不用string啊?
[解决办法]
一般的话,时间和空间互斥的. 想速度快,就增加内存. 比如设计成链表. list.
[解决办法]
愿意自己写就写个链表之类的东西。
想偷懒就用STL里的list——其实也是个链表。
[解决办法]
不使用STL就只好自己写了。不过你的描述还不详细,不知道你究竟需要一个什么样的数据结构。你能更详细的描述一下你的需求吗?
[解决办法]
也就是说你在buffer里存储的东西是有自己结构的,它的结构中还包含有Key。
那么你把它们混合保存在buffer里,应该是因为每一个元素的长度是不确定的?
你能再描述一下每个元素的具体组成吗?除了Key之外还有什么内容?它们有什么需要特别处理的特点?比如你所说的内容里包含'\0'。
[解决办法]
分析楼主的需求是下面这么几点
1、具有快速查找的功能(有序数组符合,链表不符合)
2、具有良好的随机插入删除性能(数组不符合,链表符合)
3、动态结构(静态数组不符合,链表符合)
4、不能用STL
好像只有平衡树能行了吧,算法复杂了点(我还不会,只听过这个概念)
[解决办法]
当Key存在,则修改值;当Key不存在,则于尾部添加?
值的长度和数目是固定的吗?R是结束标志?
[解决办法]
还有,删除操作频繁吗?元素规模有多大?
[解决办法]
这类问题用环形缓冲区或者双缓冲、三缓冲甚至四缓冲就可以解决了。
[解决办法]
这是典型的数据结构的问题呀,插入操作,不想移位肯定要用链表
[解决办法]
那我建议你使用如下结构来构建数组:
struct unit{ string key; string data;};strut buffer{ unit *buffer; int size; int sizeMax;};
[解决办法]
既然有可能在中间插入数据,那干脆就把数组做成有序的好了。这样查找速度会大大提高,插入时也不再需要遍历整个数组。虽然做插入/删除时会导致内存移动操作,但所耗时间被减少的查找时间抵消,增加也有限。
这里是否使用数组有个关键点:你的插入操作频繁程度如何?大量的内存移动操作所耗时间是否会影响到你整个系统的运行?如果不构成损害性影响就不用担心低效问题。如果构成损害了,那就得变更数据结构。能满足低消耗的频繁插入/查找操作的数据结构只有平衡树一类,那个东西写起来就比较麻烦了。
至于数据的复杂倒不是问题。我建议你用string是因为你原本使用字符数组来保存它们的。如果能够进一步分析,也可能找到更有效的数据结构来保存它。