作者coal511464 (我一個人)
看板C_and_CPP
標題[問題] vector在find函示中設定找尋範圍
時間Wed Mar 9 23:26:58 2016
開發平台(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