【发布时间】:2021-06-24 06:38:59
【问题描述】:
我想使用 std::distance 来查找我的元素的索引。
代码如下:
#include <iostream>
#include <map>
#include <iterator>
#include <string>
using namespace std;
int main() {
std::map<int, std::string> m = {{1, "huang"}, {2, "wei"}, {3, "pu"}};
auto it = m.find(2);
cout << std::distance(it, m.begin()) << endl; // struck here
cout << std::distance(it, m.end()) << endl;
}
但我发现代码在cout 中被击中,我的代码有什么问题?
【问题讨论】:
-
应该是
std::distance(m.begin(), it)。 -
如果 last 不能通过(可能重复)从 first 递增 first 到达,则行为未定义。 distance ref
-
如果编译器没有推断出行为未定义,而是代码尝试递增
it,直到达到m.begin(),这将需要很长时间。或者这需要很短的时间,但风扇可能会加速。