例如,std::vector<std::vector<int>>::iterator
是否大于std::vector<int>::iterator
?
答案 0 :(得分:5)
标准库迭代器类型的定义(以及它们的大小)是实现定义的。 sizeof(vector<T>::iterator)
可能取决于T
。但是,在实践中,情况往往并非如此。 vector<T>::iterator
实际上只是T*
的包装器。同样,list<T>::iterator
通常是指向列表节点的指针的包装器。某些类型(如deques)可能具有更复杂的迭代器,但大小仍不太可能依赖于模板参数。
(编辑:for std::array
迭代器是指针。)
答案 1 :(得分:2)
既然完全实现了定义,你也可以做一个快速测试:
#include <iostream>
#include <vector>
#include <deque>
#include <list>
#include <iterator>
int main() {
std::cout << "vector<vector<int>>::iterator: " << sizeof(std::vector<std::vector<int>>::iterator) << "\n";
std::cout << "vector<int>::iterator: " << sizeof(std::vector<int>::iterator) << "\n";
std::cout << "vector<bool>:iterator: " << sizeof(std::vector<bool>::iterator) << "\n";
std::cout << "deque<int>::iterator: " << sizeof(std::deque<int>::iterator) << "\n";
std::cout << "list<int>::iterator: " << sizeof(std::list<int>::iterator) << "\n";
std::cout << "list<list<int>>::iterator: " << sizeof(std::list<std::list<int>>::iterator) << "\n";
std::cout << "deque<list<int>>::iterator: " << sizeof(std::deque<std::list<int>>::iterator) << "\n";
}
结果:(VC ++ 2015):
vector<vector<int>>::iterator: 8
vector<int>::iterator: 8
vector<bool>:iterator: 16
deque<int>::iterator: 24
list<int>::iterator: 8
list<list<int>>::iterator: 8
deque<list<int>>::iterator: 24
...和g ++ 5.1:
vector<vector<int>>::iterator: 8
vector<int>::iterator: 8
vector<bool>:iterator: 16
deque<int>::iterator: 32
list<int>::iterator: 8
list<list<int>>::iterator: 8
deque<list<int>>::iterator: 32