gpt4 book ai didi

c++ - 奇怪的 std::distance 输出

转载 作者:行者123 更新时间:2023-11-28 08:01:35 25 4
gpt4 key购买 nike

我直接从我正在处理的一些代码中提取了这个小片段:

KeyIter it = timeline_.lowerBound( frame );
if ( timeline_.isKeyAtFrame( frame ) ) {
++it;
}

KeyIter it1 = it - 1;
cout << "dist1: " << std::distance( timeline_.begin(), it1 ) << endl;
while ( ignore.contains( it1.key() ) ) {
cout << "dist2: " << std::distance( timeline_.begin(), it1 - 1 ) << endl;
if ( std::distance( timeline_.begin(), --it1 ) < 0 ) {
break;
}
}
cout << "dist3: " << std::distance( timeline_.begin(), it1 ) << endl;

它给出了这个输出:

dist1: 0
dist2: 2
dist3: 2

ignoreQSet<int>it1timeline_ 的迭代器(它是键为 int 的 map 类型)。如你所见it1从开头开始(这是正确的),然后控制进入 while 循环,其中迭代器向后移动一个;但 std::distance 不是 -1,而是 2!其间发生的只是使用 key 的拷贝来检查 QSet 是否存在。包含相同的 int .

使用调试器我可以确认 timeline_两者之间没有变化dist#输出(此时代码中只有一个线程在运行)。

谁能看出为什么std::distance会给出这个输出吗?

最佳答案

我不确定 Qt 对此的行为,但在标准库容器中,获取 [container.begin(),container.end()] 范围之外的迭代器是未定义的行为。我假设它在 Qt 中是一样的,尽管我不确定。然而,即使不是,std::distance 在非随机访问迭代器上的行为是计算从第一个迭代器到第一个迭代器所需的增量 数最后,所以这样:

std::distance(x,y)

yx 之前,是未定义的行为。

关于c++ - 奇怪的 std::distance 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333572/

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