[問題] vector在find函示中設定找尋範圍

作者: coal511464 (我一個人)   2016-03-09 23:26:58
開發平台(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
請問要如何修改呢?
謝謝
作者: LPH66 (-6.2598534e+18f)   2016-03-09 23:28:00
C++ 在以 iterator 指定範圍都是 [begin, end)也就是含頭不含尾, 因此你這樣指定時 23 是在範圍外你應該知道 .end() 會回傳指向最後一個元素的後一格這也是一樣的道理
作者: coal511464 (我一個人)   2016-03-09 23:35:00
但我覺得奇怪的是 明明要找"9999" 但輸出23位置很奇怪
作者: Feis (永遠睡不著 @@)   2016-03-09 23:42:00
... 你覺得 i 有可能等於 v.end() 嗎?.應該是搞錯 "結尾" 了. 那不是 23 的位置, 是 "結尾"
作者: coal511464 (我一個人)   2016-03-09 23:43:00
阿 我好像了解什麼了 看來我累了...改了範圍 後面的v.end() 也必須更著改
作者: ko27tye (好滋好滋)   2016-03-10 00:08:00
find沒找到會回傳第二個iterator 所以你i=v.end()-2你find的範圍用begin和end就好啦 幹嘛這麼搞剛
作者: coal511464 (我一個人)   2016-03-10 00:27:00
因為我要處理2維vector 而且每個一維vector長度未知另外 每個一維vector最後一個元素必須忽略所以才必須這樣子~ 謝謝各位

Links booklink

Contact Us: admin [ a t ] ucptt.com