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

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

本文关键字:数组 是否 对象 何检查 检查      更新时间:2023-10-16

假设我有一个像这样声明的对象数组:

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 循环函数来正确存储它们,甚至使用向量,但现在,我必须使用此方法来检查数组是否为空/空。知道怎么做吗?我在这里看到了很多例子,但几乎所有都是字符串/整数/浮点数等数组。

数组

本身不能为"空"。

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];它已经为您的Object创建了 100 个内存插槽,并为每个内存插槽调用了默认构造函数。

  • 从物理上讲,数组中紧跟在引号行之后的元素。

  • 从逻辑上讲,您决定的就有多少,最好将该数字保存到 count .


如果Object的默认c'tor在初始化方面还不够,那么你有几个选项来检查天气它的内容是否初始化:

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

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 之外的所有内容) - 丑陋和糟糕的做法。