→ loveme00835:看迴圈, 你的A裝的似乎是 STL 容器喔! 有沒有筆誤? 08/13 23:17
→ ericinttu:clean build試試 08/13 23:20
→ Zoxge:A B C都是STL容器沒錯 是用vector 用法有錯嗎?? 08/13 23:29
推 loveme00835:A[x] = B[x].size() - C[x].size() (文字敘述) 08/13 23:30
→ loveme00835:A[x].push_back (B[x].size() - C[x].size()); (程式) 08/13 23:30
推 TroyLee:A[x].push_back 還是 A.push_back ? 08/13 23:30
→ loveme00835:前後不一致, 看起來A的型態就好像vector<vector<int>> 08/13 23:31
→ Zoxge:sorry打錯了,A B C都是二維,是vector<vector<int>>沒錯 08/14 00:13
→ Zoxge:是A[x].push_back,沒有打錯 08/14 00:13
※ 編輯: Zoxge 來自: 123.195.3.39 (08/14 00:14)
→ Zoxge:是不是我語法的使用有問題呢? 08/14 00:14
→ loveme00835:問題應該在 B[x].size() - C[x].size() 這邊, 在計算 08/14 00:15
→ Zoxge:我剛剛用cout去輸出,結果和我用ofstream輸出到檔案的不同!! 08/14 00:15
→ loveme00835:結果之前, 先檢查看看這些vector的大小有沒有錯掉吧 08/14 00:15
→ Zoxge:ofstream出來的是我要的東西 (在Dev 4.9.9.2裡) 08/14 00:16
→ Zoxge:但是" cout << B[x].size() - C[x].size(); " 整個完全是錯 08/14 00:16
→ loveme00835:那你把 cout 換成ofstream串流試試, 應該也是一樣的 08/14 00:17
→ loveme00835:錯誤, 原因應該是在你設定這些vector if vectors的時 08/14 00:18
→ loveme00835:候有出錯 08/14 00:18
→ Zoxge:但是 cout << B[x].size(); 和 cout << C[x].size(); 都是對 08/14 00:18
→ Zoxge:還有 cout << D[x][0]; 也是對的 08/14 00:19
→ Zoxge: A (上一行打錯) 08/14 00:20
→ loveme00835:是不是當 B[x].size() < C[x].size() , 算出來是錯的? 08/14 00:22
→ Zoxge:ofstream的結果和cout的結果是一樣的,錯同樣地方 08/14 00:23
→ loveme00835:隔空抓藥有點難, 有沒有更詳細點的程式碼? 還有檔案大 08/14 00:24
→ Zoxge:B[x].size() - C[x].size() 這個整個錯掉 08/14 00:24
→ loveme00835:概的內容 08/14 00:24
→ Zoxge:只有B[x].size() - C[x].size() = 0 (=A[x][0])的case是正確 08/14 00:25
→ loveme00835:因為vector::size()回傳的是一個非負整數, 所以小減大 08/14 00:25
→ Zoxge:B[x].size() - C[x].size() 不等於 0 的話,出來結果都錯的 08/14 00:25
→ loveme00835:是一定錯掉的, 除非你寫 (int)B[x].size() 再去算 08/14 00:26
→ Zoxge:前面加 (int) 是指轉成integer嗎? 那本來是什麼type呢? 08/14 00:27
→ loveme00835:本來是回傳size_type, 應該是unsigned long 08/14 00:29
→ Zoxge:請問size_type是指什麼呢? 08/14 00:30
→ loveme00835:只是 container 的一些 typedefs, 實際上應該是size_t 08/14 00:32
→ loveme00835:而這個size_t在不同平台上大小會不一樣 08/14 00:32
→ loveme00835:轉整數後有對嗎? 08/14 00:35
→ Zoxge:依大大的建議,前面加上(int) 08/14 00:36
→ Zoxge:(int)B[x].size() - (int)C[x].size() 是對的了 08/14 00:36
→ loveme00835:轉 int 還有一個限制, 就是size_t 通常會很大, 如果確 08/14 00:38
→ Zoxge:但是在工作站上... 08/14 00:38
→ loveme00835:定你 vector 的大小可以用 int 表示, 這樣轉才安全 08/14 00:38
→ Zoxge:A[x].push_back ((int)Bcount[x].size() - (int)Ccount[x]. 08/14 00:39
→ loveme00835:工作站上怎麼了? 08/14 00:39
→ Zoxge:size()中 唯獨x=4的case是錯的(變成0,正確應該-1) 08/14 00:40
→ Zoxge:其它case都是對的,為什麼會這樣呢? 08/14 00:41
→ Zoxge:這樣和本來沒加 (int) 一樣 (在工作站上沒變正確) 08/14 00:41
→ Zoxge:請問要如何確定我開的vector大小可以用int表示呢? 08/14 00:42
→ loveme00835:B[4].size()、C[4].size() 的值各是多少 08/14 00:43
→ loveme00835:通常都可以用int 表示啦, 因為到一定程度你的記憶體就 08/14 00:44
→ loveme00835:用光了@_@ 08/14 00:44
推 TroyLee:沒有人注意到 for 迴圈條件跟他文中有衝突嗎 @@a 08/14 00:46
→ Zoxge:B[4].size()=0 C[4].size()=1 08/14 00:46
→ loveme00835:先確定各自的值都對, 再來做計算比較好~~ 08/14 00:46
→ TroyLee:A[0] ~ A[N-1] 但是 for 迴圈是 x<=N 08/14 00:47
→ Zoxge:但是其它case也有是0和1這樣一樣的情況 只是x=4是錯 @@ 08/14 00:47
→ loveme00835:這是程式中印出來的結果? 08/14 00:48
→ Zoxge:阿 T大,我for loop改成x < N就對了耶!! 好感動 @@a 08/14 00:50
→ loveme00835:有沒有迴圈的全貌可以看? 08/14 00:50
→ loveme00835:= = 08/14 00:50
→ Zoxge:回l大 "程式中"是指什麼呢? 我是用cout和ofstream(結果相同) 08/14 00:51
→ loveme00835:跑陣列 index 我是建議用 != 來跑, 這樣換到跑迭代器 08/14 00:51
→ Zoxge:我會寫x<=N是因為當x是奇數時,要使它變成偶數才行 08/14 00:52
→ loveme00835:語法也沒有差, 也不用考慮啥時要 < 啥時要 <= 08/14 00:52
→ Zoxge:本來是另外用push_back來使A[N][0]=0 但我當時是想省這一行 08/14 00:53
→ loveme00835:那這樣你要改的應該是 N 而不是測試條件 08/14 00:53
→ Zoxge:所以改成 x<=N @@ 08/14 00:53
→ TroyLee:吃快弄破碗 08/14 00:54
→ loveme00835:所以你本來vector<vector<int>>, 裡面的vector是空的? 08/14 00:54
→ loveme00835:你想要偶數項為0奇數項用算的? 08/14 00:55
→ Zoxge:用!=會換到跑迭代器? 這個我不懂ㄟ @@a 什麼意思呢? 08/14 00:57
→ Zoxge:我有先設定一個 vector <int> D; 然後A.push_back (D); 08/14 00:58
→ Zoxge: ^ (B和C也有用) 08/14 00:59
→ Zoxge:我是要把N個東西分成兩組,兩組東西要一樣多 08/14 01:00
→ loveme00835:喔喔 還是不懂> <, 已經成功了就好, 希望你可以多了解 08/14 01:02
→ loveme00835:vector 的一些用法, 還有STL 其他函式的用途, 很多時 08/14 01:03
→ loveme00835:候都有現成的函式可以寫, 像是 08/14 01:04
→ loveme00835:vector<vector<int>> A( 1, vector<int>() ); 08/14 01:04
→ loveme00835:建構的時候, A裡面已經有一個vector<int>了, 不用再 08/14 01:05
→ loveme00835:push_back 08/14 01:05
→ Zoxge:喔喔 感謝您 其實push_back那個方法也是別人教我的 QQ 08/14 01:07
→ loveme00835:vector<vector<int>> A( 1, vector<int>( 1, 0 ) ); 08/14 01:07
→ Zoxge:我真的很新手 對STL容器很不熟 QQ 08/14 01:07
→ loveme00835:這樣在A[0][0] 的值就已經是 0 了 08/14 01:07
→ loveme00835:0.0 雖然很方便是沒錯啦, 但是沒有善用的話, 跑得慢寫 08/14 01:08
→ Zoxge:但我還是不懂 為什麼寫x<=N只會導致 x=4的case出現錯誤? 08/14 01:08
→ loveme00835:也慢 08/14 01:08
→ loveme00835:這要看編出來的組語才能說明了, 超出範圍的結果是難以 08/14 01:10
→ loveme00835:想像的 08/14 01:10
推 TroyLee:你的 N 該不會也等於 4 吧 08/14 01:14
→ Zoxge:用STL寫起來會比較快吧? 跑起來也比較快嗎? 08/14 01:14
→ Zoxge:N = 11 08/14 01:15
→ loveme00835:STL 主要包含了 containers 還有 algorithms, 我想還 08/14 01:16
→ loveme00835:有更多符合你需求的, 你卻純手工打造, 這樣就會寫比 08/14 01:17
推 TroyLee:應該說你的 input data 本身就不包含 A[N] 這個, 那會產生 08/14 01:17
→ TroyLee:什麼樣的錯誤都是無法預期的 08/14 01:17
→ loveme00835:較慢 08/14 01:18
→ loveme00835:用 vector::at , 他會幫你檢查索引有沒有超界, 超界會 08/14 01:21
→ loveme00835:丟例外讓你知道, 用operator[]他不會幫你檢查, 錯了也 08/14 01:21
→ loveme00835:不知道問題在哪 08/14 01:21
→ Zoxge:嗯嗯 感謝大大拔刀相助 <(_ _)> 08/14 01:21
→ TroyLee:沒辦法, 最近在推路平專案... 08/14 01:23
→ Zoxge:at不是用來指定某一格的值用的嗎? 08/14 01:24
→ Zoxge:為什麼在Dev 4.9.9.2和 工作站 會有不同的結果呢? 08/14 01:29
→ Zoxge:Dev C++是適合什麼時候使用的阿? 08/14 01:30
→ sunneo:適合在MS Windows95-XP年代 沒有程式開發的IDE時使用 08/14 02:07