迭代器的大小是否与其容器的大小正相关?

时间:2015-08-24 03:02:45

标签: c++

例如,std::vector<std::vector<int>>::iterator是否大于std::vector<int>::iterator

2 个答案:

答案 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