使用std :: string迭代器查找它的字符串的开头和结尾

时间:2010-03-03 04:08:43

标签: c++ iterator stdstring

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

谢谢, 菲尔

2 个答案:

答案 0 :(得分:6)

简短的回答是否定的。答案很长,因为预计迭代器不会知道迭代的容器或范围,所以只能预期它们

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

此外,某些类型的迭代器可能不仅仅是上述类型,但主要是它们都需要以某种形式执行上述操作。

答案 1 :(得分:1)

  • 对于字符串的结束点: 假设内部字符串以空值终止。然后通过解引用迭代器来查看它们是否为'\ 0'以确定下一个位置是终点。但是对于其他非空终止字符串,我们无法了解这些信息。
  • 对于字符串的起点: 无法做到这一点。

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

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

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