获取 std::vector<std::string>::iterator 的索引

Getting index of a std::vector<std::string>::iterator

本文关键字:std iterator 索引 gt lt vector 获取 string      更新时间:2023-10-16

这就是我目前所做的:

class menu_item
{
  private:
    // ....
    std::vector<std::string> options_;
    std::vector<std::string>::iterator current_;
  public:
    menu_item(std::string name, std::vector<std::string> options)
        : name_(name), options_(options)
    {
        current_ = begin(options_);
    }
    // ....
    const int curr_opt_id()
    {
        return current_ - begin(options_);
    }
};

但是curr_opt_id()返回-24。有人知道我哪里做错了吗?

添加vector对象时,有可能会重新分配内部存储空间,从而使所有现有迭代器失效。在无效的迭代器上做算术是不会有好结果的。

参见迭代器失效规则

vector的迭代器在重新分配时失效,这种情况发生在当前容量不足以容纳实际内容和新添加的元素时。

这里最可能发生的情况是,在构造时初始化的current_迭代器在随后插入options_时失效,从而在求值表达式时产生未定义的行为:

current_ - begin(options_)