【问题标题】:Is it possible to check if a string iterator is equal to its end iterator without the original string?是否可以检查字符串迭代器是否等于没有原始字符串的结束迭代器?
【发布时间】:2021-09-20 14:27:20
【问题描述】:

假设我有一些 std::string::iterator it 用于一些未知字符串 str。我是否可以在无法访问 strstr.end() 的情况下检查 it == str.end() 的时间?

【问题讨论】:

  • 这确实是个绝招!您是如何获得it 的访问权限的?
  • 简短回答:不。std::string 可以包含空字符,因此您甚至不能只期待空终止符。
  • 我会说答案是“不”,但这不是很有趣。也许问题中的更多细节将允许解决方案。
  • 这基本上是stackoverflow.com/questions/18555171 的复制品,但std::string 迭代器可能有一些特殊之处允许这样做。

标签: c++ string iterator


【解决方案1】:

从逻辑上讲,迭代器是一个指针。它不是索引和对容器的引用。因此,您无法获取有关包含迭代器项的容器的信息。

这在某种意义上类似于 pass-array-as-pointer 问题:当您将数组作为指针传递时,您还必须始终传递长度,因为指针无法识别数组的结束位置。您的迭代器无法识别字符串的结束位置。

正如其他人所指出的,在大多数情况下可行的粗略方法是检查迭代器指向的字符是否为空字符。没关系,只要您的字符串不包含任何空字符;但请记住,如果您将字符串作为接口边界处理,其他人可能会在其中传递带有 null 的字符串,因为这样做是完全合法的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 2019-01-17
    • 2011-06-09
    • 2012-10-23
    • 2014-07-29
    • 1970-01-01
    • 2011-07-22
    • 2011-01-04
    相关资源
    最近更新 更多