Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代器的大小与其容器的大小是否正相关?_C++ - Fatal编程技术网

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

C++ 迭代器的大小与其容器的大小是否正相关?,c++,C++,例如,std::vector::iterator是否大于std::vector::iterator?标准库迭代器类型的定义(以及它们的大小)是实现定义的。sizeof(vector::iterator)可能取决于T。然而,在实践中,情况往往并非如此

例如,
std::vector::iterator
是否大于
std::vector::iterator

标准库迭代器类型的定义(以及它们的大小)是实现定义的。
sizeof(vector::iterator)
可能取决于
T
。然而,在实践中,情况往往并非如此<实际上,迭代器只是
T*
上的包装器。类似地,
list::iterator
通常是指向列表节点的指针上的包装器。某些类型(如deques)可能具有更复杂的迭代器,但其大小仍不太可能取决于模板参数


(编辑:对于
std::array
迭代器是一个指针。)

标准库迭代器类型的定义(以及它们的大小)是实现定义的。
sizeof(vector::iterator)
可能取决于
T
。然而,在实践中,情况往往并非如此<实际上,迭代器只是
T*
上的包装器。类似地,
list::iterator
通常是指向列表节点的指针上的包装器。某些类型(如deques)可能具有更复杂的迭代器,但其大小仍不太可能取决于模板参数


(编辑:对于
std::array
来说,迭代器是一个指针。)

因为它完全是实现定义的,所以您不妨做一个快速测试:

#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";
}
#包括
#包括
#包括
#包括
#包括
int main(){

std::cout因为它完全是实现定义的,所以您不妨做一个快速测试:

#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";
}
#包括
#包括
#包括
#包括
#包括
int main(){

std::cout
std::vector::iterator
很可能是一个不同于正常的大小,因为
std::vector
@NeilKirk哦,是的,我忘了。在VS2013的调试模式下,
vector
/
列表::iterator
的大小有3个指针那么大,“只是
T*
上的包装器”断言对于“发布”版本来说是正确的,但是,…
std::vector::iterator
可能会比正常的大小不同,因为
std::vector
@NeilKirk哦,是的,我忘记了。在VS2013的调试模式下,
vector
/
列表::iterator
的大小有3个指针那么大;而“只需包装
T*
”断言适用于“发布”"但是构建…你说的大小是什么意思?
std::vector
占用的空间不一定比
std::vector
占用的空间大@NeilKirk是的,我指的是他们占用的空间。可以正式地谈论
sizeof
操作符或者你说的大小是什么意思?std::vector
占用的空间s不一定比
std::vector
@NeilKirk占用的空间多。是的,我的意思是他们占用的空间。可以是正式的,谈论
sizeof
运算符64位模式?可能有助于将
sizeof(void*)
添加到列表中。64位模式?可能有助于将
sizeof(void*)
添加到列表中。
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