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

时间:2015-04-19 10:46:59

标签: c++ arrays object

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

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

3 个答案:

答案 0 :(得分:1)

使用以下代码创建数组:Object Array[100]; 已创建 100个内存插槽供Object使用,并为每个插槽调用默认构造函数。

  • 从物理上讲,数组中有100个元素位于引用行之后。

  • 从逻辑上讲,您可以根据自己的意愿决定,最好将该号码保存到count


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

  • 您可以添加方法(例如bool isInitialized()
  • 您可以添加以operator==为参数的const char *,并将其与""进行比较。
  • 您可以添加operator==作为参数,并将其与Object进行比较,假设""来自Object

答案 1 :(得分:1)

数组本身不能为“空”。

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();

答案 2 :(得分:0)

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