看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 沒有 問題(Question): 一般來說要在vector找某筆資料可以使用find vector<string> v; v.push_back("50"); v.push_back("2991"); v.push_back("23"); v.push_back("9999"); vector<string>::iterator i = v.begin(); i = find(v.begin(), v.end(), "9999"); if (i != v.end ()) { int nPosition = distance (v.begin(), i); cout << "Value "<< *i; cout << " found in the vector at position: " << nPosition << endl; } else cout<<"not found"<<endl; 如果有找到就會回傳在vector所在位置,反之則說not found。 現在我有問題的地方在於要如何設定 "找尋範圍" 改成 i = find(v.begin()+2, v.end(), "2991"); 則會顯示not found 但如果是從 v.end()-1 就會變得怪怪的。 例子: i = find(v.begin(), v.end()-2, "9999"); Output: Value 23 found in the vector at position: 2 預期結果: not found 請問要如何修改呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.96.2 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1457537222.A.D04.html
LPH66: C++ 在以 iterator 指定範圍都是 [begin, end) 03/09 23:28
LPH66: 也就是含頭不含尾, 因此你這樣指定時 23 是在範圍外 03/09 23:28
LPH66: 你應該知道 .end() 會回傳指向最後一個元素的後一格 03/09 23:28
LPH66: 這也是一樣的道理 03/09 23:29
coal511464: 但我覺得奇怪的是 明明要找"9999" 但輸出23位置很奇怪 03/09 23:35
Feis: ... 你覺得 i 有可能等於 v.end() 嗎?. 03/09 23:42
Feis: 應該是搞錯 "結尾" 了. 那不是 23 的位置, 是 "結尾" 03/09 23:43
coal511464: 阿 我好像了解什麼了 看來我累了... 03/09 23:43
coal511464: 改了範圍 後面的v.end() 也必須更著改 03/09 23:44
ko27tye: find沒找到會回傳第二個iterator 所以你i=v.end()-2 03/10 00:08
ko27tye: 你find的範圍用begin和end就好啦 幹嘛這麼搞剛 03/10 00:10
coal511464: 因為我要處理2維vector 而且每個一維vector長度未知 03/10 00:27
coal511464: 另外 每個一維vector最後一個元素必須忽略 03/10 00:28
coal511464: 所以才必須這樣子~ 謝謝各位 03/10 00:29