gpt4 book ai didi

c++ - size_type 中迭代器之间的长度

转载 作者:太空狗 更新时间:2023-10-29 21:11:46 26 4
gpt4 key购买 nike

我正在编写自定义算法,有时它需要获取两个迭代器之间的距离。如果我假设 it1 <it2 我可以获得它们之间的正距离 (it2 - it1)。这没关系,但是 std::distanceoperator- 返回 difference_type (在我的例子中)是 long long 的别名。如果距离太大而不适合 long long 但适合 unsigned long long(在我的例子中是 size_type 别名)怎么办?对于这个例子,我还假设 long longint64_t 并且 unsigned long longuint64_t:

std::string container = ...; // assume enourmous number of characters, like 2^64 - 1024
std::cout << (container.begin() - container.end());

由于 operator- 返回 difference_type,它不适合 2^64 - 1024 它应该打印负数(实际上任何东西 - 它是UB)由于溢出。当然,我可以将其转换回 std::string::size_type 但我无法确定之前未定义的行为是否如我假设的那样起作用。我该如何处理此类问题?

最佳答案

[..] What if the distance is too big to fit in [distance_type] but will fit inside [some other type] [..]

How can I deal with such issue?

你不能。这是实现容器以及相应迭代器的人的工作。

如果他们用于距离的类型不能适合容器可能出现的所有值,那么这就是容器中的错误。

澄清:difference_type 实际上是 depends on the iterators用过。

关于c++ - size_type 中迭代器之间的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49610276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com