10

仅给定一个 std::string 迭代器,是否可以确定字符串的起点和终点?假设我无权访问字符串对象,因此无法调用 string.begin() 和 string.end(),我所能做的就是递增或递减迭代器并测试值。

谢谢,菲尔

4

2 回答 2

6

最简洁的答案是不。长答案是,因为不期望迭代器知道正在迭代的容器或范围,所以它们只期望

  • 能够跳到下一个元素(inc or dec to next or prev)
  • 取消引用它们以显示对它们指向的值的引用
  • 当然,将自己与其他迭代器进行比较,最重要的是某种“结束”迭代器。

此外,某些类型的迭代器可能不仅仅执行上述操作,但原则上它们都需要以某种形式或其他形式具有/执行上述操作。

于 2010-03-03T04:27:49.360 回答
1
  • 对于字符串的结束点:假设内部字符串是空终止的。然后通过解引用迭代器来查看它们是否为 '\0' 来确定下一个位置是终点。但是对于其他非空终止的字符串,是不可能知道这些信息的。
  • 对于字符串的起点:没有办法做这样的事情。

默认的 std::string::iterator 只是一个随机的双向迭代器,对容器一无所知。

但是如果你在 Visual C++ 平台上工作,也许你可以使用一些像下面这样的黑客方式来获取它的容器的控件,但这非常危险:

  // it is the passed in string::iterator parameter.
  if (it._Has_container()) {
      string* strRef = (string*)it._Mycont;
  }
于 2010-03-03T06:06:55.523 回答