获取 std::vector<std::string>::iterator 的索引
Getting index of a std::vector<std::string>::iterator
这就是我目前所做的:
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_)
相关文章:
- std::iterator::reference 必须是引用吗?
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 如何将STD :: Iterator与基本类型Uint8_t**使用
- std::map<K,V>::iterator 是否实例化 std::map<K,V>?
- 关于从第二个存储值_ty2秒复制std :: Map Iterator的数据的问题
- 如何使用for_each,transform,Iterator和lambda的某种组合将STD ::集合的字符串转换为小
- 给定一个 std::set::iterator,获取一个指向下一个元素的迭代器
- 在std::向量中查找Iterator
- 如何使用regex_token_iterator<std::string::iterator>通过迭代器本身获取子匹配的原始字符串的位置?
- Clang Modules 与 std <iterator> 和 <boost/move/iterator.hpp 的交互>
- C 寻求一个std :: string :: iterator的位置
- std::multiset::iterator = NULL 不再有效
- 有什么方法可以将std :: string :: iterator的值存储在C 中的char *中
- "Invalid iterator range"将initializer_list插入 std::vector 时
- 需要澄清C++ std::iterator
- MFC容器中的find_if,迭代器派生自std::iterator