亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 7373 | 回復(fù): 16
打印 上一主題 下一主題

[C] 用C實(shí)現(xiàn)一個(gè)變長數(shù)組需要記錄幾個(gè)數(shù)據(jù) [復(fù)制鏈接]

論壇徽章:
6
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-11-27 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-01 06:20:00每日論壇發(fā)貼之星
日期:2015-12-01 06:20:0015-16賽季CBA聯(lián)賽之佛山
日期:2017-03-26 23:38:0315-16賽季CBA聯(lián)賽之江蘇
日期:2017-07-17 10:08:4415-16賽季CBA聯(lián)賽之北京
日期:2018-03-04 17:01:50
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2017-12-04 14:25 |只看該作者 |倒序?yàn)g覽
用C實(shí)現(xiàn)一個(gè)變長數(shù)組需要記錄幾個(gè)數(shù)據(jù)

一般的變長數(shù)組( vector )的實(shí)現(xiàn),需要記錄三個(gè)數(shù)據(jù):
  • 數(shù)據(jù)空間的地址,
  • 空間大小,
  • 數(shù)組里已存在的元素個(gè)數(shù)。

最近看云風(fēng)的BLOG
云風(fēng)同學(xué)說
其實(shí)并不需要三個(gè)變量來維持 vector 結(jié)構(gòu),兩個(gè)就夠了。那個(gè)表識(shí)容量大小的變量是多余的
struct vector { int *data; int size; };

用C實(shí)現(xiàn)一個(gè)變長數(shù)組需要記錄幾個(gè)數(shù)據(jù)??




論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
2 [報(bào)告]
發(fā)表于 2017-12-04 19:38 |只看該作者
本帖最后由 yulihua49 于 2017-12-04 19:39 編輯
dorodaloo 發(fā)表于 2017-12-04 14:25
用C實(shí)現(xiàn)一個(gè)變長數(shù)組需要記錄幾個(gè)數(shù)據(jù)

一般的變長數(shù)組( vector )的實(shí)現(xiàn),需要記錄三個(gè)數(shù)據(jù):

一般情況云風(fēng)同學(xué)是對(duì)的。
特殊的,例如string,可以增加一個(gè)有效數(shù)據(jù)長度,因?yàn)樗菑念^連續(xù)運(yùn)用的。

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [報(bào)告]
發(fā)表于 2017-12-05 08:24 |只看該作者
那假如我刪掉一個(gè)元素時(shí),他是將 size 減一,還是重新分配一個(gè) size-1 的內(nèi)存然后將數(shù)據(jù)拷貝進(jìn)去?
如果是后者,那效率太低了;如果是前者,我再增加一個(gè)元素時(shí),他怎么知道不需要重新分配內(nèi)存?

通過非標(biāo)函數(shù) _msize/malloc_usable_size 可以取得實(shí)際內(nèi)存大小,但用戶的內(nèi)存可未必是依標(biāo)準(zhǔn)方式來的,有可能使用了內(nèi)存池。

論壇徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16賽季CBA聯(lián)賽之江蘇
日期:2017-11-27 11:42:3515-16賽季CBA聯(lián)賽之八一
日期:2017-04-12 14:26:2815-16賽季CBA聯(lián)賽之吉林
日期:2016-08-20 10:43:1215-16賽季CBA聯(lián)賽之廣夏
日期:2016-06-23 09:53:58程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-11 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-09 06:20:0015-16賽季CBA聯(lián)賽之上海
日期:2015-12-25 16:40:3515-16賽季CBA聯(lián)賽之廣夏
日期:2015-12-22 09:39:36程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-24 06:20:002015亞冠之德黑蘭石油
日期:2015-08-07 09:57:302015年辭舊歲徽章
日期:2015-03-03 16:54:15
4 [報(bào)告]
發(fā)表于 2017-12-05 09:36 |只看該作者
沒有capacity,怎么知道int *data的界限在哪里?

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2017-12-05 10:24 |只看該作者
If you want to change something, start with babysteps. Take a small action - any action - and growfrom there.


論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀(jì)念徽章
日期:2015-12-22 16:50:40IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
6 [報(bào)告]
發(fā)表于 2017-12-05 18:58 |只看該作者
原帖在這里 https://blog.codingnow.com/2008/06/variable_length_array.html
說的是2倍的分配策略,這種策略下,新的size大于老的size才去觸發(fā),而且由于每次都是2倍的策略,
所以每次都會(huì)去判斷空間夠不夠用,不需要直接與容量比較,所以就不需要容量這個(gè)參數(shù)了,所以這種
位操作是可以的。
但是實(shí)際場(chǎng)景是,容量到達(dá)一定大小后就不會(huì)去2倍了,比如內(nèi)存到達(dá)一半,所以這個(gè)技巧就沒用了

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
7 [報(bào)告]
發(fā)表于 2017-12-06 03:27 |只看該作者
如果你的增長策略是固定的話,比如起始16個(gè)然后每次乘2,那么從當(dāng)前元素個(gè)數(shù)就可以算出數(shù)組容量了,此時(shí)那個(gè)表示數(shù)組容量的變量是多余的,比如數(shù)組中有17個(gè)元素,那么當(dāng)前容量顯然是32。
不過這么做有個(gè)地方有問題,如果你的數(shù)組可以刪元素的話就要多做一些事,比如當(dāng)前17個(gè),刪除掉一個(gè),你就必須把多余的空間還回去,要不然就錯(cuò)了。
但如果你能保證數(shù)組使用連續(xù)的內(nèi)存空間的話其實(shí)也不用麻煩,因?yàn)閒ree一段內(nèi)存并不需要知道這段內(nèi)存有多大,無非就是你會(huì)做一些無用的realloc,比如從17減到16再增長到17,如果你知道數(shù)組實(shí)際容量的話是不需要重新分配內(nèi)存的,但如果你不知道的話就需要做一次realloc減半,再做一次realloc加倍。

目前std::vector的實(shí)現(xiàn)是記錄了數(shù)組容量的,因?yàn)関ector里可以刪元素。

論壇徽章:
6
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-11-27 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-01 06:20:00每日論壇發(fā)貼之星
日期:2015-12-01 06:20:0015-16賽季CBA聯(lián)賽之佛山
日期:2017-03-26 23:38:0315-16賽季CBA聯(lián)賽之江蘇
日期:2017-07-17 10:08:4415-16賽季CBA聯(lián)賽之北京
日期:2018-03-04 17:01:50
8 [報(bào)告]
發(fā)表于 2017-12-06 14:25 |只看該作者
回復(fù) 2# yulihua49
例如string,可以增加一個(gè)有效數(shù)據(jù)長度,因?yàn)樗菑念^連續(xù)運(yùn)用的。

push_back函數(shù)代碼
push_back 在實(shí)際編程中是非常重要的

論壇徽章:
6
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-11-27 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-01 06:20:00每日論壇發(fā)貼之星
日期:2015-12-01 06:20:0015-16賽季CBA聯(lián)賽之佛山
日期:2017-03-26 23:38:0315-16賽季CBA聯(lián)賽之江蘇
日期:2017-07-17 10:08:4415-16賽季CBA聯(lián)賽之北京
日期:2018-03-04 17:01:50
9 [報(bào)告]
發(fā)表于 2017-12-28 13:27 |只看該作者
本帖最后由 dorodaloo 于 2017-12-28 13:28 編輯

回復(fù) 6# cokeboL

cokeboL老師



值得學(xué)習(xí)和能夠給大家?guī)硪欢ㄕ_知識(shí)的有能力人

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀(jì)念徽章
日期:2015-12-22 16:50:40IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
10 [報(bào)告]
發(fā)表于 2017-12-28 17:44 |只看該作者
貓哥這種才配稱為偶像級(jí)別的存在,我的偶像是貓哥
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP