检查C++容器是否为空的最有效方法是什么?

Var*_*Rao -6 c++ stl

检查容器是否为空,以下哪项最有效?假设'c'是C++ Containers库的任何容器部分

1. c.begin()==c.end()
2. c.empty() 
3. c.size()==0
Run Code Online (Sandbox Code Playgroud)

在2的情况下,文档读取" 检查容器是否没有元素,即begin()== end()"但是没有说明empty()是否实现为begin()== end().那么,empty()究竟是如何实现的呢?

为什么这是错的?

sizeof(c) == 0
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 7

为什么sizeof(c) == 0错了?每个对象必须有一个地址,这意味着它必须具有1或更大的大小.这意味着sizeof(anything)总是大于0.因为那sizeof(c) == 0将永远不会成真.


另请注意,这sizeof是一个编译时操作.它无法为您提供仅在运行时知道的任何内容的大小.例如

char * foo = new char[20];
std::cout << sizeof(foo);
Run Code Online (Sandbox Code Playgroud)

总是会给你指针的大小(在大多数平台上为4或8),而不是指针指向的内存大小.

  • 空基类也有地址,只是它们可能与其他子对象共享该地址. (5认同)
  • 我想补充说`sizeof()`是对象的编译时间大小,你不能用它来以任何方式确定运行时信息. (2认同)