【发布时间】:2016-07-19 22:59:09
【问题描述】:
假设我有三个相同类型的向量 A、B 和 C,并且给我一个向量容器的迭代器,我如何找到它属于哪个容器? 谢谢
【问题讨论】:
假设我有三个相同类型的向量 A、B 和 C,并且给我一个向量容器的迭代器,我如何找到它属于哪个容器? 谢谢
【问题讨论】:
你不能。您的设计已损坏,请重新考虑。
迭代器的全部意义在于从容器(和其他数据集合)中抽象出来,你不能只是颠倒抽象。
【讨论】:
严格回答你的问题,你可以这样检查:
vector<T>::iterator it = ...;
if (it >= A.begin() && it < A.end()) // it is in vector A
if (it >= B.begin() && it < B.end()) // or in vector B
if (it >= C.begin() && it < C.end()) // and here in vector C
这仅适用于vector 使用随机访问迭代器,并且不适用于map 和list 等大量其他容器。正如@Baum mit Augen 所说,您应该重新设计以避免这种情况。也许您应该将对所需向量的引用与迭代器一起传递?
【讨论】:
std::cout << std::less<decltype(&*it)>()(&*it, &*begin(b));
std::less 调用 operator< 除非是专门的,这里不是这种情况。因此,再次比较的两个迭代器必须是“相同范围”的有效迭代器。 (有关其技术定义,请查找“可达”)。