2

所以这就是我到目前为止所尝试的:

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。有人知道我在这里做错了什么吗?

4

2 回答 2

3

当您添加到向量时,内部存储可能会被重新分配,这将使所有现有的迭代器失效。对无效的迭代器进行算术运算不会有好的结果。

请参阅迭代器失效规则

于 2013-05-03T15:41:16.390 回答
2

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

这里最有可能发生的情况是,current_在构造时初始化的迭代器被后续插入到 中而无效options_,这在评估表达式时会给您带来未定义的行为:

current_ - begin(options_)
于 2013-05-03T15:41:27.020 回答