【问题标题】:Copy const_iterator to std::string to save position将 const_iterator 复制到 std::string 以保存位置
【发布时间】:2017-10-28 04:44:05
【问题描述】:

在执行 ++ 操作时从 std::string 类创建 const_iterator 快照而不使其无效是否合法。

例如: 如果想将位置保存在字符串中,那么我复制当前的 const_iterator:

std::string::const_iterator it = prev;

现在我的解析器继续使用 prev++。是否仍然有效并指向prev的上一个位置?

【问题讨论】:

  • @alirakiyan 因为那不会告诉他什么是保证会发生。当然,如果它不起作用,他知道它没有用。但如果它确实有效,他什么都不知道——它可能安全/合法/有保证,也可能不安全。

标签: c++ string c++11 iterator


【解决方案1】:

是否仍然有效并指向prev的上一个位置?

是的,只要std::string 未更改(以operator[]at() 以外的方式),这是合法的并且迭代器快照仍然有效。

【讨论】:

  • 您可以通过operator[]at() 更改字符串中的字符,而不会使任何迭代器失效。
  • @John 但位置将保持不变。
  • 我只是想放松一下你的说法,即迭代器“只要字符串没有改变”就保持有效。只要字符串没有以 operator[] 或 at() 以外的方式更改,它就保持有效。
  • @John THX,被采纳。
  • 使用任何迭代器时,字符串不会更改。那么C++标准保证是安全的吗?
猜你喜欢
  • 2014-07-23
  • 2023-03-26
  • 2012-01-06
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多