繁体   English   中英

如何检查对象数组是否为空/空?

[英]How do I check if an array of objects is empty/null?

可以说我有一个这样声明的对象数组:

Object Array[100];
int count = 0;
bool exit;

do
{
    if (Array[count] == "")
    {
        //code that stores data
        exit = true;
    }
    else
    {
        count++;
    }
}
while (exit != true);

我一直在编译器中显示错误消息:

error: no match for ‘operator==’ in ‘Array[count] == ""'

我知道我可以使用for循环函数正确地存储它们,甚至可以使用向量,但是现在,我必须使用此方法来检查数组是否为空/空。 知道怎么做吗? 我在这里看到了很多示例,但是几乎所有示例都是string / int / float等数组。

使用以下方法创建数组时: Object Array[100]; 已经为您的Object 创建了 100个内存插槽,并为每个插槽调用了默认的构造函数。

  • 物理上,在引用行之后,数组中有100个元素。

  • 从逻辑上讲,您可以决定多少,最好还是保存该数字以进行count


如果Object的默认值在初始化方面还不够,那么您可以通过几种方法来检查其内容是否已初始化:

  • 您可以添加一个方法(即bool isInitialized()
  • 您可以添加一个将const char *作为参数的operator==并将其与""进行比较。
  • 您可以添加一个operator== ,该operator==将另一个Object用作参数,并将其与""进行比较,假定Object具有来自const char *的c'tor。

数组本身不能为“空”。

Object Array[100];

是创建100个Object的数组的声明。 它们已经构造并存在(如果默认可构造)。

如果类型Object具有某种“空”状态的概念,则可以检查该状态(例如std::vector提供了成员.empty()来检查是否为空。),也可以使用容器来保存数据(这也使其成为堆的一部分,而不是堆栈存储器的一部分,并实现动态调整大小。

std::vector<Object> vec;
int count = 0;
// do stuff...
do
{
    if (count >= vec.size())
    {
        //code that stores data
        exit = true;
    }
    else
    {
        count++;
    }
}
while (exit != true);

而您也可以说std::size_t count = vec.size();

Object Array[100]; 不能为空。 另一方面,可以将指向动态分配数组的指针初始化为nullptr并对此进行检查:

Object *Array = nullptr;

if(!Array) // or Array == nullptr
    cout << "Array is empty (unallocated)" << endl;

Array = new Array[100];

if(Array) // or Array != nullptr
    cout << "Array is NOT empty" << endl;

Array[count]没有任何意义。 您正在以索引count (这对索引来说是个坏名字)访问元素,并将其与const char*进行比较。 std::vector是必经之路。 上面的代码(以及除使用std::vector之外的所有代码)-丑陋和不良做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM