我正在寻找C ++向量中的元素,当我找到它时,我希望以数字形式(整数,浮点数)获得找到的元素索引。
我天真的尝试是这样的:
int x;
int index;
vector<int> myvector;
vector<int>::iterator it;
it = find(myvector.begin(), myvector.end(), x);
index = (int) * it;
此代码出错。你能告诉我如何将迭代器转换为int(如果可能的话),或者你能告诉我如何以其他方式获得找到的元素索引吗?感谢。
答案 0 :(得分:26)
您需要使用标准函数std::distance
index = std::distance( myvector.begin(), it );
if ( index < myvector.size() )
{
// do something with the vector element with that index
}
即使使用随机访问迭代器,也要始终使用std::distance
。此功能在新旧C ++标准中可用。
答案 1 :(得分:9)
如果你想要找到找到的元素的索引,那么这就是从序列开始的距离:
index = it - myvector.begin();
或者,自C ++ 11以来,
index = std::distance(myvector.begin(), it);
可以使用任何前向迭代器类型,而不仅仅是像向量中的随机访问类型。
答案 2 :(得分:3)
你只需取消引用像这样的迭代器
index = *it;
但是你应该首先看看你是否真的找到了什么
it = find(myvector.begin(), myvector.end(), x);
if (it != myvector.end())
{
index = *it;
}
要查找找到匹配项的索引,可以使用从向量开头减去找到的指针。
it = find(myvector.begin(), myvector.end(), x);
if (it != myvector.end())
{
index = it - myvector.begin(); // Index from start of vector
}
此外,希望在您的实际代码中定义x
,因为您显示的代码段x
未初始化,因此会导致未定义的行为。