Programming 板


LINE

※ 引述《QQrzQQ (QQ)》之铭言: : 大家好 : 最近第一次用到 vector 的方法 : 看网路上的用法 拿来使用做 matlab randperm 的函数 : 根据 matlab 的原函数 只是做出一连串的 rand number : sorting 以後 再把 index 值读出来 .... : void randperm(int *out, int n) : { : struct temp : { : int index; : int rand_num; : }; : struct temp_compare : { : bool operator() (temp i, temp j) {return (i.index<j.index);} : } temp_compare_obj; : // create memory : temp *rand_temp = new temp[n]; : // generate random number with index : for(int i=0; i<n; i++) : { : rand_temp[i].index = i; : rand_temp[i].rand_num = rand(); : } : vector<temp> vec_rand_temp (rand_temp, rand_temp+n); // **** : sort(vec_rand_temp.begin(), vec_rand_temp.end(),temp_compare_obj); // **** : for(int i=0; i<n; i++) : out[i] = vec_rand_temp[i].index; : delete rand_temp; : } : 其中 vec_rand_temp 里面居然都没有值!!! : 想请教一下大概是甚麽样的问题 : 利用 pointer 如何把 阵列里的东西放进 vector 里面 : 这样的写法哪里错了呢? : 谢谢大家~~ 我猜是 C++ 吧? 我拿去编译唯一的问题是两个 struct 是 local 的 所以改成 global 就可以编译了 完整程式码: #include<iostream> #include<cstdlib> #include<vector> #include<algorithm> using namespace std; struct temp { int index; int rand_num; }; struct temp_compare { bool operator() (temp i, temp j) {return (i.index<j.index);} }; void randperm(int *out, int n) { temp_compare temp_compare_obj; // create memory temp *rand_temp = new temp[n]; // generate random number with index for(int i=0; i<n; i++) { rand_temp[i].index = i; rand_temp[i].rand_num = rand(); } vector<temp> vec_rand_temp (rand_temp, rand_temp+n); // **** sort(vec_rand_temp.begin(), vec_rand_temp.end(),temp_compare_obj); //**** for(int i=0; i<n; i++) out[i] = vec_rand_temp[i].index; delete rand_temp; } int main(){ int test[5]; randperm( test, 5 ); for( int i=0 ; i<5 ; ++i ){ cout << test[i] << " "; } cout << endl; return 0; } 输出: 0 1 2 3 4 有成功存进 test 所以有东西 可是还是有若干问题 从必不可犯的开始吧 有个很大的错误是 delete 你 new 出一个阵列 就不应该用 delete 删它 而应该用 delete [] 不然会只 delete 掉一格的位置 还有用 index 的大小来 sort 会发现顺序根本没变阿 所以原 po 似乎是想要用 rand_num 来 sort 吧? 那似乎就写反了 还有一个小事情就是你订了一个跟 pair<T, S> 一模一样的 struct 要是我就用 pair 代替了 typedef pair<int, int> temp; 还有 temp_compare_obj 只用一次通常也不会令出来,这就看个人习惯了啦 把上面这些问题处理过程式码长这样: #include<iostream> #include<cstdlib> #include<vector> #include<algorithm> using namespace std; typedef pair< int, int > temp; struct temp_compare { bool operator() (temp i, temp j) {return (i.second<j.second);} }; void randperm(int *out, int n) { // create memory temp *rand_temp = new temp[n]; // generate random number with index for(int i=0; i<n; i++) { rand_temp[i].first = i; rand_temp[i].second = rand(); } vector<temp> vec_rand_temp (rand_temp, rand_temp+n); // **** sort(vec_rand_temp.begin(), vec_rand_temp.end(),temp_compare()); //**** for(int i=0; i<n; i++) out[i] = vec_rand_temp[i].first; delete [] rand_temp; } int main(){ int test[5]; randperm( test, 5 ); for( int i=0 ; i<5 ; ++i ){ cout << test[i] << " "; } cout << endl; return 0; } 不过与其用 vector, 用 map 会不会比较方便? 欢迎讨论 以上 by Aider --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 182.235.46.73
1F:→ WJAider:忘了设 srand() ,请大家注意 182.235.46.73 01/06 22:05
2F:推 QQrzQQ:推一下 真的是rand_num和index弄反了.. 114.37.173.59 01/09 22:55
3F:→ QQrzQQ:另外请问一下 map的用法 大概是怎麽样阿? 114.37.173.59 01/09 22:55
4F:→ QQrzQQ:可以稍微说明一下吗? 114.37.173.59 01/09 22:55
5F:→ LifePattern:google stl map 114.32.247.244 01/10 22:53







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灯, 水草

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

TOP