作者bhbbbbb (影)
看板C_and_CPP
標題[問題] size()函數產生錯誤
時間Mon Feb 5 16:18:00 2018
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1517818693.A.4C4.html
1F:→ djshen: 你有查過那段warning的意思? 02/05 16:32
2F:→ bhbbbbb: 那段意思丟google翻譯是:隱式轉換失去了整數精度 02/05 18:06
3F:→ bhbbbbb: 大概懂他的意思,不過我不懂為何會這樣 02/05 18:06
4F:→ outofyou: size()<2的時候? 02/05 18:08
5F:→ skyrimrvks: 表達式同時用了無符號跟有號變數 02/05 19:22
6F:→ Raymond0710: seq.size()-2結果unsigned 會導致overflow 02/05 20:14
7F:推 LPH66: 根本原因是 size() 回傳的型態是無號的 size_t 02/06 00:25
8F:→ b98901056: 朝聖一樓<_ _> (離題 02/06 01:26
謝謝大家 我回去翻了我的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
9F:推 steve1012: size type 通常是 sizet 你static cast 還是 cast 成 s 02/06 11:10
10F:→ steve1012: izet不是 02/06 11:10