检查容器是否为空,以下哪项最有效?假设'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)
为什么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),而不是指针指向的内存大小.