[問題] size()函數產生錯誤

看板C_and_CPP作者 (影)時間6年前 (2018/02/05 16:18), 6年前編輯推噓2(208)
留言10則, 8人參與, 6年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) CodeBlock 問題(Question): 安安各位高手大家好,小弟我CPP新手啦 最近寫題目的時候有一題丟去judge 一直說我Runtime error 我找我已經accepted的朋友對了一下 幾乎一模一樣 最後才發現一個不一樣的地方 簡述一下那題(下面會附上程式碼): 就是給定一個長度為n的數列,然後output區域極值的數量 我的做法是先把給的那n個數丟進一個叫seq的vector 最後我是把for迴圈條件句中的i<seq.size()-2 改成i<n-2才accepted https://ideone.com/jrAIvY 不過我不明白這兩個有什麼不一樣 隔天又出現了一個差不多的問題 https://ideone.com/5dYVz5 我把問題寫在裡面了,還有一點就是剛剛用XCode測試 tem.size()跳出了一個warning: Implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'int' 先謝謝大家了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.178.253 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1517818693.A.4C4.html

02/05 16:32, 6年前 , 1F
你有查過那段warning的意思?
02/05 16:32, 1F

02/05 18:06, 6年前 , 2F
那段意思丟google翻譯是:隱式轉換失去了整數精度
02/05 18:06, 2F

02/05 18:06, 6年前 , 3F
大概懂他的意思,不過我不懂為何會這樣
02/05 18:06, 3F

02/05 18:08, 6年前 , 4F
size()<2的時候?
02/05 18:08, 4F

02/05 19:22, 6年前 , 5F
表達式同時用了無符號跟有號變數
02/05 19:22, 5F

02/05 20:14, 6年前 , 6F
seq.size()-2結果unsigned 會導致overflow
02/05 20:14, 6F

02/06 00:25, 6年前 , 7F
根本原因是 size() 回傳的型態是無號的 size_t
02/06 00:25, 7F

02/06 01:26, 6年前 , 8F
朝聖一樓<_ _> (離題
02/06 01:26, 8F
謝謝大家 我回去翻了我的primer,發現我的基本觀念還真是糟糕 但若我今天想要拿一個假設string::size_type型別的數拿去跟型別為int的數做運算 是否勢必要做型別轉換,例如: string::size_type ix = 1024 ; int ival = ix ; // 這樣會跳出警告,因為long unsigned 大於 int 如果我確定那個變數ix並不會超過int的範圍,是否應該這樣寫 int ival2 = static_cast<string::size_type>(ix); 但我的Xcode仍跳出警告,請問是否我的理解錯誤了? ※ 編輯: bhbbbbb (59.120.178.253), 02/06/2018 10:12:14

02/06 11:10, 6年前 , 9F
size type 通常是 sizet 你static cast 還是 cast 成 s
02/06 11:10, 9F

02/06 11:10, 6年前 , 10F
izet不是
02/06 11:10, 10F
文章代碼(AID): #1QU1D5J4 (C_and_CPP)