【问题标题】:How to convert vector iterator to int in C++如何在 C++ 中将向量迭代器转换为 int
【发布时间】:2015-01-15 17:23:25
【问题描述】:

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

我的天真尝试是这样的:

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

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

【问题讨论】:

  • 错误是什么?演员表毫无意义(但并非不正确),因为 *it 已经是您想要的值,您应该在取消引用之前检查它是否不等于 myvector.end()(否则您将收到运行时错误或其他未定义的行为)。
  • 只是一个注释。您不想将迭代器转换为int,这几乎没有任何意义。 Iterator 更像是 C++ 标准库命名法中的指针,因此它指向一个地方,您可以取消引用它。当你得到它时,你可以从一开始就测量距离,就像用指针(或多或少)一样。
  • 对不起,我错过了你真正想要的(元素的索引,而不是值)。看我的回答。
  • 在尝试取消引用之前,您需要确保it != myvector.end()

标签: c++ vector iterator


【解决方案1】:

你需要使用标准函数std::distance

index = std::distance( myvector.begin(), it );

if ( index < myvector.size() )
{
    // do something with the vector element with that index
}

尽量使用std::distance,即使是随机访问迭代器。此功能在新旧 C++ 标准中均可用。

【讨论】:

    【解决方案2】:

    如果你想要找到的元素的索引,那就是到序列开头的距离:

    index = it - myvector.begin();
    

    或者,从 C++11 开始,

    index = std::distance(myvector.begin(), it);
    

    它适用于任何前向迭代器类型,而不仅仅是来自向量的随机访问类型。

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 2020-11-06
      • 2011-09-02
      • 2015-09-11
      • 2016-09-17
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多