C_and_CPP 板


LINE

这篇文是2010年发的,因为最近遇到相似的问题想来请教。 我正在练习merge sort,用C很好写,原始码在此: https://gist.github.com/gnitnaw/6ab90fbad5b2c07cb28fbe4b42ae3306 用divide & conquer的步骤是这样: array size >=3的话,拆两半,这个用pointer很简单, 就把它变成两个pointer,一个摆array[0],另一个摆array[N/2]。 可是如果用C++改写就不一样了。 由於array size很大,如果用vector,由於它可能不是连续空间, 我不能用pointer或reference把vector分成两半。 就变成只能用copy vector的方式(那我得copy log_2(100000)次....) 还是我能用new一个size = 100000的array? 不知道C++的array是不是连续空间?可不可以用pointer指向该array中的某元素? 对C++11以後仍然不是很熟,还在练习中(汗),请多指教。 PS: 我知道C++还是可以用C的语法,不过我想尽可能用C++11以後的语法。 ※ 引述《zxvc (执着)》之铭言: : 我想让"指标""一直"指向某个vector的元素, : 请问有无可能。 : 事实上这在VC是不行的。 : 我知道vector可能发生reallocate memory的情形。 : 所以就算某个指标某个时候指向vector的一个element, : 一旦有reallocate的情形(如某次push_back), : 就不再保证指向同一个element。例如以下code在VC会出现执行时期错误: : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : #include<iostream> : #include<vector> : int main() : { : vector<int> v; : v.push_back(0); : int *p = &(*(v.begin())); : v.push_back(1); : cout<<*p; // error! : } : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : #include<iostream> : #include<vector> : int main() : { : vector<int> v; : v.push_back(0); : vector<int>::iterator p = v.begin(); : v.push_back(1); : cout<<*p; // error! : } : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : 甚至不用指标,改用iterator,也一样会出问题。 : 所以请问除了指标、iterator,难道只剩index可以一直指向vector同一个element吗? : index的用法如: : int p = 0; : cout<<v[p]; --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 86.209.24.41
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1466276791.A.294.html ※ 编辑: wtchen (86.209.24.41), 06/19/2016 03:08:36
1F:推 fatrabitree: Vector 是连续空间阿 06/19 03:40
2F:推 fatrabitree: New也是连续空间,这都不算c++11的新特性 06/19 03:49
3F:→ wtchen: 所以我可以用指标指到vector里面的element? 06/19 04:17
4F:推 CoNsTaR: 可以啊 只是新增元素之後原来的指标就可能失效 06/19 05:59
5F:推 FRAXIS: 你应该只需要 index 而不需要真的指标吧 06/19 07:02
6F:推 steve1012: 应该不需要用Pointer 06/19 07:59
7F:推 weiclin: 这篇? http://codereview.stackexchange.com/a/49479 06/19 09:16
8F:→ Caesar08: The elements are stored contiguously,... since C++03 06/19 10:28
9F:→ wtchen: 是我被pointer宠坏了....感谢 06/20 15:10







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP