C++ 使用std::string迭代器查找它的开始和结束';s弦

C++ 使用std::string迭代器查找它的开始和结束';s弦,c++,iterator,stdstring,C++,Iterator,Stdstring,给定一个std::string迭代器,是否可以确定字符串的起点和终点?假设我无法访问string对象,因此无法调用string.begin()和string.end(),我所能做的就是递增或递减迭代器并测试值 谢谢, Phil简短的答案是否定的。长的答案是,因为迭代器不需要知道正在迭代的容器或范围,只需要知道 能够跳转到下一个元素(inc或dec到下一个或上一个) 取消对其自身的引用,以显示对其所指向的值的引用 当然,将自己与其他迭代器进行比较,最重要的是某种“结束”迭代器 此外,某些类型的

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

谢谢,
Phil

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

  • 能够跳转到下一个元素(inc或dec到下一个或上一个)
  • 取消对其自身的引用,以显示对其所指向的值的引用
  • 当然,将自己与其他迭代器进行比较,最重要的是某种“结束”迭代器
此外,某些类型的迭代器可能不仅仅做上述工作,但主要是它们都需要以某种形式执行上述工作。

  • 对于字符串的端点: 假设内部字符串以null结尾。然后通过取消对迭代器的引用,查看它们是否为“\0”,以确定下一个位置是终点。但对于其他以非空结尾的字符串,不可能了解此类信息
  • 对于字符串的起点: 没有办法做这种事
默认的std::string::iterator只是一个随机的双向迭代器,对容器一无所知

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

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

是的,您确实需要指向末尾或开头的迭代器来比较您当前的迭代器,这可以在您定义字符串时确定?