c++ 我有一个使用new操作符的动态数组,但是只有一些元素包含值,而其他元素不包含值,我该如何检查?

xqk2d5yq  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(115)
int *arr = new int[3];
arr[0] = 1;
arr[2] = 3;

for (int i = 0; i < arr.size(); i++)
{
    if(arr[i] exists/initialized) // what would be the condition?
        std::cout << arr[i] << " ";
}

我试图打印数组中已初始化的元素,并忽略未初始化的元素。
因此,上面的代码将打印输出:
我想修复这个问题,以便它输出:

nue99wik

nue99wik1#

不能读取未初始化的元素,它们的值是不确定的,阅读它们是未定义的。
你可以使用一个大小相同的bool数组,将它的所有元素初始化为false,每次你初始化另一个数组中的某个元素时,你都会将相应的元素设置为true

int* arr = new int[3];
 bool* has_value = new bool[3]{};

 arr[0] = 1;
 has_value[0] = true;
 arr[1] = 42;
 has_value[1] = true;

 for (size_t i= 0;i<3; ++i) {
       if (has_value[i]) std::cout << arr[i] << " ";
       else std::cout << "* ";
 }

正如注解中提到的,如果使用数组中从第一个元素开始的连续部分,则足以存储已初始化元素的数量。

相关问题