垃圾/默认值的替代项,沿 nullptr语言 - C++ 行

Alternative for Garbage/Default value along the lines of nullptr - C++

本文关键字:nullptr 语言 C++ 默认值 垃圾      更新时间:2023-10-16

我有一个问题,我必须创建一个整数数组,比如说,10个元素。只有部分元素被编辑,而不是按特定顺序编辑。例如,程序可能只处理索引 3、0、4、7 处的元素,存储的值可以是任何整数(int 的所有可能值)。最后,我必须最大限度地获取程序修改的所有元素并显示它。

为了确定哪些元素被修改了,这是我的方法:我将数组声明为长 int 数组而不是所需的 int,并使用超出 int 的值初始化所有元素,假设const long int max = -214748300 .这样,如果数组中元素的值与max匹配,我就会知道它们没有修改。

我想知道的是,有什么方法可以在不修改数据类型的情况下做到这一点?我正在寻找任何类似于指针nullptr的标准库实现,但它适用于intchar数据类型。我主要对C++实现感兴趣,但也欢迎其他语言的实现。

问题是,从技术上讲,你想要"int or undefined",这就是像 boost::optional 这样的类型(可能会标准化)。

但当然,这些类型不是零成本的,并且有轻微的开销。

否则,您可以使用 std::pair<bool,int> 在值旁边捆绑标志,或者有两个单独的集合,如 std::vector<bool> changed;(插入强制性vector<bool>免责声明)和 std::vector<int> values; 。这两者显然都需要您手动管理两者之间的语义连接。

如果你已经在这样做了,并且额外的布尔值太累了,你也可以使用一个位字段,比如:

struct optional_uint
{
  unsigned int is_unset :1;
  unsigned int value    :31;
};

只需要您在is_unset设置为 1 的情况下初始化它们。

哪种解决方案最适合您,实际上取决于您的要求。