代码之家  ›  专栏  ›  技术社区  ›  Phil Boltt

使用STD::字符串迭代器查找字符串的开始和结束

  •  10
  • Phil Boltt  · 技术社区  · 14 年前

    仅给出一个STD::字符串迭代器,可以确定字符串的起始点和结束点吗?假设我没有访问string对象的权限,所以不能调用string.begin()和string.end(),我所能做的就是递增或递减迭代器并测试该值。

    谢谢, 菲尔

    2 回复  |  直到 14 年前
        1
  •  6
  •   Matthieu N.    14 年前

    简短的答案是否定的。长的答案是,因为迭代器不需要知道正在迭代的容器或范围,所以只需要知道

    • 能够跳到下一个元素(inc或dec到next或prev)
    • 取消引用自身以显示对其所指向值的引用
    • 在整个过程中,将自己与其他迭代器进行比较,最重要的是某种“结束”迭代器。

    此外,某些类型的迭代器可以做的不仅仅是上面所述的,但主要是它们都需要以某种形式或其他形式拥有/执行上面所述的内容。

        2
  •  1
  •   meta    14 年前
    • 对于字符串的端点: 假设内部字符串以空结尾。然后通过取消对迭代器的引用来查看它们是否是'\0',以确定下一个位置是端点。但是对于其他非空终止的字符串,不可能知道这些信息。
    • 对于字符串的起点: 没办法做这种事。

    默认的STD::String::迭代器只是一个随机的双向迭代程序,对容器一无所知。

    但是如果你在Visual C++平台上工作,也许你可以使用一些类似的黑客攻击方法来控制它的容器,但是这很危险:

      // it is the passed in string::iterator parameter.
      if (it._Has_container()) {
          string* strRef = (string*)it._Mycont;
      }