2013-05-03 129 views
2

所以这就是我迄今为止尝试:获取一个std指数:: vector的<std::string>:迭代

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

+1

你怎么样使用你的'menu_item'类?初始化后你是否在'options_'中添加元素? – 2013-05-03 15:38:12

+0

像这样:http://pastebin.com/cjVKjxFW – user2176127 2013-05-03 15:43:43

+0

虽然 – 2013-05-03 15:46:05

回答

4

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

看到一个向量的Iterator invalidation rules

2

迭代得到重新分配时,当电流容量不足以容纳实际内容加上新加入的元素恰好无效。

什么是最有可能发生在这里的是,current_迭代器,这是在施工时被初始化,得到由后续插入无效到options_,在计算表达式时,让你未定义行为:

current_ - begin(options_) 
相关问题