Re: [問題] map的key有辦法檢驗是否存在了嗎?
先說明以下都針對C++.
推
04/01 16:13,
04/01 16:13
我已看懂了, 多謝指點
→
04/01 17:28,
04/01 17:28
推
04/01 21:19,
04/01 21:19
→
04/01 21:20,
04/01 21:20
→
04/01 21:20,
04/01 21:20
推
04/01 21:47,
04/01 21:47
→
04/01 21:48,
04/01 21:48
→
04/01 21:48,
04/01 21:48
雖可理解, 但我覺得語意還是要講清楚
string用length是std的介面設計問題, 我也沒辦法改變(攤手
→
04/01 22:19,
04/01 22:19
→
04/01 22:19,
04/01 22:19
→
04/01 22:28,
04/01 22:28
→
04/01 22:28,
04/01 22:28
→
04/01 22:59,
04/01 22:59
→
04/01 23:00,
04/01 23:00
→
04/01 23:01,
04/01 23:01
→
04/01 23:41,
04/01 23:41
確實我也認為find != end才是慣用法,
網路上能看到的文章應該大都是用find != end檢查存在,
我想如果去Stackoverflow發問應該也會得到使用find的解答吧?
老實說我是真的沒看過用count > 0這種慣用法
推
04/01 22:39,
04/01 22:39
推
04/01 23:04,
04/01 23:04
→
04/01 23:05,
04/01 23:05
→
04/01 23:05,
04/01 23:05
推
04/01 23:10,
04/01 23:10
--------
所謂的語意我嘗試翻譯成中文一下:
1. count > 0:
A: 請問John在嗎?
B: 您好, John的個數大於0
2. find != end:
A: 請問John在嗎?
B: 您好, John在
參考這邊也寫得很清楚
http://www.cplusplus.com/reference/map/map/find/
"Searches the container for an element with a key equivalent to k and returns
an iterator to it if found"
對於STL容器來說使用begin, end應該是家常便飯, 沒甚麼問題的
count如同loveme大所說,
還有 > 1, > 2, > 3無限多種case,
今天出現一行程式碼
if (count > 0) { ... }
後面若接著出現
else if (count > 1) { ... }
else if (count > 2) { ... }
都很合理, 但這已經完全超出"確認存在"的範疇,
所以當我看到一行
if (count > 0)的時候我還無法判斷到底是要知道個數還是其他意思,
但當我看到
if (find != end)的時候馬上就知道是"不存在"的情況.
這就是我"語意"的意思, 程式碼要能夠一眼就看出他本身的意圖才夠"清楚".
這也是為什麼書裡面會說要多使用泛型演算法
(可參考C++編程規範: 101個準則第84條)
for loop很好, 可以做所有事情,
但當algorithm可以替代的時候就應該使用了.
比如說我想要找出容器內第一個小於5的數字,
我可以
for (unsigned int i = 0, j = vec.size(); i < j; ++i)
{
if (vec[i] < 5) return i;
}
也可以
it = std::find_if(vec.begin(), vec.end(), IsSmallerThanFive);
後者的語意就比前種清楚, 因為我一眼就可以看出要找東西.
還有一些例子就先不打了,
希望大家可以了解我"語意"的意思.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.45.115
推
04/02 10:50, , 1F
04/02 10:50, 1F
推
04/02 11:37, , 2F
04/02 11:37, 2F
討論串 (同標題文章)