[問題] Dev C++ 與 工作站 的問題

看板C_and_CPP (C/C++)作者 (Zoxge)時間13年前 (2010/08/13 23:11), 編輯推噓5(50101)
留言106則, 5人參與, 最新討論串1/1
小弟是C++程式新手 問題一 最近小弟用Dev V.4.9.9.2跑自己寫的程式 大概幾百行而已,不是很大的程式 然後昨天開始突然發生一件很怪的事 compile and run之後,會無法正常結束,或者根本就跑不出結果(直接當掉) 有時候重開機再來會變正常,但有時候卻又不正常 甚至本來正常的檔案,改個檔名之後,竟然也變不正常 搞得我快瘋了 一直檢查哪裡有錯 之後無意間把檔案換了個資料夾再執行,竟然就全部都正常了,改檔名也沒問題 然後把本來的資料夾刪掉,再重新建一個和本來同名的資料夾 再把檔案複製回去,一樣無法正常執行 真的是見鬼了,那個資料夾名稱有問題嗎?(資料夾名稱只有英文和數字而已) 連重開機之後都一樣ㄟ... 請問這是怎麼一回事阿? 問題二 我的程式拿到工作站上去跑 竟然有個vector裡面的值算出來會和在Dev V.4.9.9.2不一樣 vector是二維的 例如A[0]~A[N-1],N是從某個檔案讀進來的int A的值是由另外兩個vector算出來的 → A[x] = B[x].size() - C[x].size() (A B C都是二維) 我的寫法是: for(int x=0; x<=N; x++) { A[x].push_back (B[x].size() - C[x].size()); } 當中唯獨A[4]的值就是比Dev V.4.9.9.2的值 +1(很明顯的不正確) 然後其它的A[]值都和Dev V.4.9.9.2一樣 請問會發生這種事的可能原因是什麼呢? 反覆檢查程式,完全找不到哪裡有問題啊 QQ 以上 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.3.39

08/13 23:17, , 1F
看迴圈, 你的A裝的似乎是 STL 容器喔! 有沒有筆誤?
08/13 23:17, 1F

08/13 23:20, , 2F
clean build試試
08/13 23:20, 2F

08/13 23:29, , 3F
A B C都是STL容器沒錯 是用vector 用法有錯嗎??
08/13 23:29, 3F

08/13 23:30, , 4F
A[x] = B[x].size() - C[x].size() (文字敘述)
08/13 23:30, 4F

08/13 23:30, , 5F
A[x].push_back (B[x].size() - C[x].size()); (程式)
08/13 23:30, 5F

08/13 23:30, , 6F
A[x].push_back 還是 A.push_back ?
08/13 23:30, 6F

08/13 23:31, , 7F
前後不一致, 看起來A的型態就好像vector<vector<int>>
08/13 23:31, 7F

08/14 00:13, , 8F
sorry打錯了,A B C都是二維,是vector<vector<int>>沒錯
08/14 00:13, 8F

08/14 00:13, , 9F
是A[x].push_back,沒有打錯
08/14 00:13, 9F
※ 編輯: Zoxge 來自: 123.195.3.39 (08/14 00:14)

08/14 00:14, , 10F
是不是我語法的使用有問題呢?
08/14 00:14, 10F

08/14 00:15, , 11F
問題應該在 B[x].size() - C[x].size() 這邊, 在計算
08/14 00:15, 11F

08/14 00:15, , 12F
我剛剛用cout去輸出,結果和我用ofstream輸出到檔案的不同!!
08/14 00:15, 12F

08/14 00:15, , 13F
結果之前, 先檢查看看這些vector的大小有沒有錯掉吧
08/14 00:15, 13F

08/14 00:16, , 14F
ofstream出來的是我要的東西 (在Dev 4.9.9.2裡)
08/14 00:16, 14F

08/14 00:16, , 15F
但是" cout << B[x].size() - C[x].size(); " 整個完全是錯
08/14 00:16, 15F

08/14 00:17, , 16F
那你把 cout 換成ofstream串流試試, 應該也是一樣的
08/14 00:17, 16F

08/14 00:18, , 17F
錯誤, 原因應該是在你設定這些vector if vectors的時
08/14 00:18, 17F

08/14 00:18, , 18F
候有出錯
08/14 00:18, 18F

08/14 00:18, , 19F
但是 cout << B[x].size(); 和 cout << C[x].size(); 都是對
08/14 00:18, 19F

08/14 00:19, , 20F
還有 cout << D[x][0]; 也是對的
08/14 00:19, 20F

08/14 00:20, , 21F
A (上一行打錯)
08/14 00:20, 21F

08/14 00:22, , 22F
是不是當 B[x].size() < C[x].size() , 算出來是錯的?
08/14 00:22, 22F

08/14 00:23, , 23F
ofstream的結果和cout的結果是一樣的,錯同樣地方
08/14 00:23, 23F

08/14 00:24, , 24F
隔空抓藥有點難, 有沒有更詳細點的程式碼? 還有檔案大
08/14 00:24, 24F

08/14 00:24, , 25F
B[x].size() - C[x].size() 這個整個錯掉
08/14 00:24, 25F

08/14 00:24, , 26F
概的內容
08/14 00:24, 26F

08/14 00:25, , 27F
只有B[x].size() - C[x].size() = 0 (=A[x][0])的case是正確
08/14 00:25, 27F

08/14 00:25, , 28F
因為vector::size()回傳的是一個非負整數, 所以小減大
08/14 00:25, 28F

08/14 00:25, , 29F
B[x].size() - C[x].size() 不等於 0 的話,出來結果都錯的
08/14 00:25, 29F

08/14 00:26, , 30F
是一定錯掉的, 除非你寫 (int)B[x].size() 再去算
08/14 00:26, 30F

08/14 00:27, , 31F
前面加 (int) 是指轉成integer嗎? 那本來是什麼type呢?
08/14 00:27, 31F

08/14 00:29, , 32F
本來是回傳size_type, 應該是unsigned long
08/14 00:29, 32F

08/14 00:30, , 33F
請問size_type是指什麼呢?
08/14 00:30, 33F

08/14 00:32, , 34F
只是 container 的一些 typedefs, 實際上應該是size_t
08/14 00:32, 34F

08/14 00:32, , 35F
而這個size_t在不同平台上大小會不一樣
08/14 00:32, 35F

08/14 00:35, , 36F
轉整數後有對嗎?
08/14 00:35, 36F

08/14 00:36, , 37F
依大大的建議,前面加上(int)
08/14 00:36, 37F

08/14 00:36, , 38F
(int)B[x].size() - (int)C[x].size() 是對的了
08/14 00:36, 38F
還有 28 則推文
08/14 00:54, , 67F
吃快弄破碗
08/14 00:54, 67F

08/14 00:54, , 68F
所以你本來vector<vector<int>>, 裡面的vector是空的?
08/14 00:54, 68F

08/14 00:55, , 69F
你想要偶數項為0奇數項用算的?
08/14 00:55, 69F

08/14 00:57, , 70F
用!=會換到跑迭代器? 這個我不懂ㄟ @@a 什麼意思呢?
08/14 00:57, 70F

08/14 00:58, , 71F
我有先設定一個 vector <int> D; 然後A.push_back (D);
08/14 00:58, 71F

08/14 00:59, , 72F
^ (B和C也有用)
08/14 00:59, 72F

08/14 01:00, , 73F
我是要把N個東西分成兩組,兩組東西要一樣多
08/14 01:00, 73F

08/14 01:01, , 74F
08/14 01:01, 74F

08/14 01:02, , 75F
喔喔 還是不懂> <, 已經成功了就好, 希望你可以多了解
08/14 01:02, 75F

08/14 01:03, , 76F
vector 的一些用法, 還有STL 其他函式的用途, 很多時
08/14 01:03, 76F

08/14 01:04, , 77F
候都有現成的函式可以寫, 像是
08/14 01:04, 77F

08/14 01:04, , 78F
vector<vector<int>> A( 1, vector<int>() );
08/14 01:04, 78F

08/14 01:05, , 79F
建構的時候, A裡面已經有一個vector<int>了, 不用再
08/14 01:05, 79F

08/14 01:05, , 80F
push_back
08/14 01:05, 80F

08/14 01:07, , 81F
喔喔 感謝您 其實push_back那個方法也是別人教我的 QQ
08/14 01:07, 81F

08/14 01:07, , 82F
vector<vector<int>> A( 1, vector<int>( 1, 0 ) );
08/14 01:07, 82F

08/14 01:07, , 83F
我真的很新手 對STL容器很不熟 QQ
08/14 01:07, 83F

08/14 01:07, , 84F
這樣在A[0][0] 的值就已經是 0 了
08/14 01:07, 84F

08/14 01:08, , 85F
0.0 雖然很方便是沒錯啦, 但是沒有善用的話, 跑得慢寫
08/14 01:08, 85F

08/14 01:08, , 86F
但我還是不懂 為什麼寫x<=N只會導致 x=4的case出現錯誤?
08/14 01:08, 86F

08/14 01:08, , 87F
也慢
08/14 01:08, 87F

08/14 01:10, , 88F
這要看編出來的組語才能說明了, 超出範圍的結果是難以
08/14 01:10, 88F

08/14 01:10, , 89F
想像的
08/14 01:10, 89F

08/14 01:14, , 90F
你的 N 該不會也等於 4 吧
08/14 01:14, 90F

08/14 01:14, , 91F
用STL寫起來會比較快吧? 跑起來也比較快嗎?
08/14 01:14, 91F

08/14 01:15, , 92F
N = 11
08/14 01:15, 92F

08/14 01:16, , 93F
STL 主要包含了 containers 還有 algorithms, 我想還
08/14 01:16, 93F

08/14 01:17, , 94F
有更多符合你需求的, 你卻純手工打造, 這樣就會寫比
08/14 01:17, 94F

08/14 01:17, , 95F
應該說你的 input data 本身就不包含 A[N] 這個, 那會產生
08/14 01:17, 95F

08/14 01:17, , 96F
什麼樣的錯誤都是無法預期的
08/14 01:17, 96F

08/14 01:18, , 97F
較慢
08/14 01:18, 97F

08/14 01:21, , 98F
用 vector::at , 他會幫你檢查索引有沒有超界, 超界會
08/14 01:21, 98F

08/14 01:21, , 99F
丟例外讓你知道, 用operator[]他不會幫你檢查, 錯了也
08/14 01:21, 99F

08/14 01:21, , 100F
不知道問題在哪
08/14 01:21, 100F

08/14 01:21, , 101F
嗯嗯 感謝大大拔刀相助 <(_ _)>
08/14 01:21, 101F

08/14 01:23, , 102F
沒辦法, 最近在推路平專案...
08/14 01:23, 102F

08/14 01:24, , 103F
at不是用來指定某一格的值用的嗎?
08/14 01:24, 103F

08/14 01:29, , 104F
為什麼在Dev 4.9.9.2和 工作站 會有不同的結果呢?
08/14 01:29, 104F

08/14 01:30, , 105F
Dev C++是適合什麼時候使用的阿?
08/14 01:30, 105F

08/14 02:07, , 106F
適合在MS Windows95-XP年代 沒有程式開發的IDE時使用
08/14 02:07, 106F
文章代碼(AID): #1CPM2PgT (C_and_CPP)
文章代碼(AID): #1CPM2PgT (C_and_CPP)