[问题] 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