gpt4 book ai didi

c++ - 我应该用什么值填充数组以指示空白?

转载 作者:行者123 更新时间:2023-12-02 16:02:30 33 4
gpt4 key购买 nike

这更像是一个礼仪问题,但是在创建新数组时,除了零之外,我应该使用什么值来指示数组中的空白空间? 例如:

int* arr;
arr = new int[10];

当我像上面的代码一样创建一个新数组时,该数组将填充十个零。我遇到的问题是我想在打印数组时使用下划线来指示空格,但是,我也有零作为数组中数据集的一部分。那么,我是否应该只用一些不太可能出现在我的数据集中的任意值(例如-32000)来填充空数组,并将其用作空白空间的指示符,或者是我可以使用某种 null 值来代替,这样我就可以知道该特定索引处的值肯定是一个空白空间?

最佳答案

您似乎要问的问题称为哨兵 - 一些具有特殊含义的数据值。

关于哨兵的选择,使用你知道不会出现的东西,并使它成为一个命名常量。例如,您可以使用:

constexpr int NoValue = std::numeric_limits<int>::min();

如果您绝对需要整个整数范围,或者如果您不能可靠地清理输入以确保数据永远不会被接受为非空值,请考虑使用更大的数据类型来表示范围一个哨兵,或使用另一个答案中建议的std::optional

或者,维护一个单独的数组来保存该信息。这样的数组每个元素只需要一位来表示该值是否为空,因此它只意味着存储的部分增加,而不是将数据类型扩展到 int 之外。这种方法在内存使用与内存局部性之间进行权衡,因为关于“空”的数据不会存储在数组中的值附近,这可能会对缓存产生影响。

关于实际的初始化问题:您的数组未初始化,需要使用 std::fill 或类似的设置值。否则,如果您尝试使用未初始化的值,您的程序的行为是未定义的。请注意,有一种特殊情况:new int[100]() 将对内存进行零初始化。但是您不能使用该构造以任何其他值进行初始化。

考虑使用 std::vector 来避免内存管理问题,并在不增加代码困惑的情况下提供非零值的初始化:

std::vector<int> arr(10, NoValue);

如您所见,可以根据程序的要求及其输入规范进行选择。我希望这可以帮助您做出更明智的决定。

关于c++ - 我应该用什么值填充数组以指示空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70252245/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com