jas*_*son 15 c++ iterator vector
我在C++向量中寻找一个元素,当我找到它时,我希望以数字形式(整数,浮点数)获得找到的元素索引.
我天真的尝试是这样的:
int x;
int index;
vector<int> myvector;
vector<int>::iterator it;
it = find(myvector.begin(), myvector.end(), x);
index = (int) * it;
Run Code Online (Sandbox Code Playgroud)
这段代码给出了错误.你能告诉我如何将迭代器转换为int(如果可能的话),或者你能告诉我如何以其他方式获得找到的元素索引吗?谢谢.
Vla*_*cow 27
您需要使用标准功能 std::distance
index = std::distance( myvector.begin(), it );
if ( index < myvector.size() )
{
// do something with the vector element with that index
}
Run Code Online (Sandbox Code Playgroud)
尝试始终使用std::distance随机访问迭代器.此功能在新旧C++标准中可用.
Mik*_*our 10
如果你想要找到找到的元素的索引,那么这就是从序列开始的距离:
index = it - myvector.begin();
Run Code Online (Sandbox Code Playgroud)
或者,从C++ 11开始,
index = std::distance(myvector.begin(), it);
Run Code Online (Sandbox Code Playgroud)
它将适用于任何前向迭代器类型,而不仅仅是像向量中那样的随机访问类型.