如何在C ++中将向量迭代器转换为int

时间:2014-11-18 13:38:33

标签: c++ vector iterator

我正在寻找C ++向量中的元素,当我找到它时,我希望以数字形式(整数,浮点数)获得找到的元素索引。

我天真的尝试是这样的:

int x;
int index;
vector<int> myvector;
vector<int>::iterator it;
it = find(myvector.begin(), myvector.end(), x);  
index = (int) * it;

此代码出错。你能告诉我如何将迭代器转换为int(如果可能的话),或者你能告诉我如何以其他方式获得找到的元素索引吗?感谢。

3 个答案:

答案 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未初始化,因此会导致未定义的行为。