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] << " "; }
我试图打印数组中已初始化的元素,并忽略未初始化的元素。因此,上面的代码将打印输出:我想修复这个问题,以便它输出:
nue99wik1#
不能读取未初始化的元素,它们的值是不确定的,阅读它们是未定义的。你可以使用一个大小相同的bool数组,将它的所有元素初始化为false,每次你初始化另一个数组中的某个元素时,你都会将相应的元素设置为true。
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 << "* "; }
正如注解中提到的,如果使用数组中从第一个元素开始的连续部分,则足以存储已初始化元素的数量。
1条答案
按热度按时间nue99wik1#
不能读取未初始化的元素,它们的值是不确定的,阅读它们是未定义的。
你可以使用一个大小相同的
bool
数组,将它的所有元素初始化为false
,每次你初始化另一个数组中的某个元素时,你都会将相应的元素设置为true
。正如注解中提到的,如果使用数组中从第一个元素开始的连续部分,则足以存储已初始化元素的数量。