首页 > 解决方案 > vector.size() = 0 和 vector.empty() 之间有区别吗?

问题描述

我正在用 C++ 编写代码,我想知道当我们调用向量时,如果我感到困惑,vector.size() = 0是否有任何区别。vecor.empty();

if (Vector.size()>1000)
    if (!Vector.empty())
        std::cout << "I am Here " ;

我想知道为了达到第三行应用第二行是否有意义?我们可以说如果第一行是真的那么我们有一个不为空的向量吗?

标签: c++size

解决方案


可观察的行为没有区别。

但是在实现细节上可能会有所不同。

例如,如果vector使用计数器实现,则size()可以只返回计数器。

empty()可以检查是否:

vector.counter == 0

如果您调用size() == 0,那将与empty()实现相同。没有不同

但在vector由 2 个指针实现的情况begin_ptrend_ptr,则size()必须计算end_ptr - begin_ptr

因此检查size() == 0将计算大小,然后与 0 进行比较。

empty()可以检查:

begin_ptr == end_ptr

empty()将以实施者认为在一般情况下效果最好的任何方式实施。

所以我建议在需要的empty()时候打电话。

如果你先检查 if size() > 1000,然后检查它是否不是empty(). 那么从逻辑上讲,这是一个无用的检查。

https://en.cppreference.com/w/cpp/container/vector/empty


推荐阅读