检查数组为空C ++

时间:2018-10-02 06:38:26

标签: c++ arrays

我正在寻找一种解决方案,该解决方案如何找到不包含任何元素的一维数组。到目前为止,我已经完成了一些漂亮的代码,但是如果有其他解决方案,那会很好。

Code_01

#include <iostream> 
#include <list> 
using namespace std; 

int main() 
{ 
    list<int> mylist{}; 
    if (mylist.empty()) { 
        cout << "True"; 
    } 
    else { 
        cout << "False"; 
    } 
    return 0; 
}

Code_03

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    vector<int> myvector{}; 
    if (myvector.empty()) { 
        cout << "True"; 
    } 
    else { 
        cout << "False"; 
    } 
    return 0; 
} 

2 个答案:

答案 0 :(得分:2)

cppreference上对std::empty的引用回答了您的问题:

  

返回给定的容器是否为空。

     

1)返回c.empty()

     

2)返回false

     

3)返回il.size()== 0

     

参数

     

c-具有空方法的容器

     

array-任意类型的数组

     

il-初始化列表

这意味着,数组永远不会为空。数组的大小固定。

答案 1 :(得分:0)

您是否尝试编译这些代码段?

第一个肯定会失败。您引用的是内置类型(int),就好像它是一个对象一样,不是。

第二个也有类似的问题(将内置类型称为对象),尽管您可以通过调用std::empty(myarray)来逃脱。请注意,定义指向int的指针然后分配mypointer=myarray的行是无用的:由于数组名称是指向第一个元素的指针,因此您只是在创建它的副本不会修改。因此,这浪费了内存。另外,在处理空指针时,建议使用nullptr或至少使用宏NULL,因为它们更容易出现在大量代码中,并且不易随意修改。最后但并非最不重要的一点是,if指针永远不会失败,因为指针将始终包含一个地址。回到可能的解决方案中,我仍然认为std::empty()会在编译期间失败,因为浏览他的文档时,似乎无法将数组作为参数,这很有意义,因为数组永远不会永远为空,它们最多可以包含未初始化的值。

由于向量的构建方式,第三个代码片段将按预期进行编译和工作。

我不知道是否可行,但是如果您具有固定的数据大小并希望避免array的(小)开销,那么您可能需要查看vector对象文档。 / p>