一般来说,C++不允许比较不同容器之间的迭代器。例如:
但是对于使用
这会打印出
如果是这样的话,更一般地说,我能否比较来自同一连续内存对象的任何span的迭代器?例如:
int main() {
std::vector<int> v = {1, 2, 3};
std::vector<int> w = {4, 5, 6};
std::cout << v.end() == w.end() << std::endl; // undefined!
}
但是对于使用
std::span::subspan()
创建的子范围也适用吗?例如:int main() {
int a[4] = { 1, 2, 3, 4};
std::span<int> s(a);
std::span<int> t = s.subspan(1, 2);
std::cout << t.begin() - s.begin() << std::endl;
}
这会打印出
1
,这是预期的,因为内部迭代器可能只是指向底层数组的指针。问题是:标准是否保证这个工作是正确的?如果是这样的话,更一般地说,我能否比较来自同一连续内存对象的任何span的迭代器?例如:
int main() {
int a[5] = { 1, 2, 3, 4, 5};
std::span<int> s(a);
std::cout << (s.subspan(1, 1).end() < s.subspan(3, 1).begin()) << std::endl;
}