垃圾/默认值的替代项,沿 nullptr语言 - C++ 行
Alternative for Garbage/Default value along the lines of nullptr - C++
我有一个问题,我必须创建一个整数数组,比如说,10个元素。只有部分元素被编辑,而不是按特定顺序编辑。例如,程序可能只处理索引 3、0、4、7 处的元素,存储的值可以是任何整数(int 的所有可能值)。最后,我必须最大限度地获取程序修改的所有元素并显示它。
为了确定哪些元素被修改了,这是我的方法:我将数组声明为长 int 数组而不是所需的 int,并使用超出 int 的值初始化所有元素,假设const long int max = -214748300
.这样,如果数组中元素的值与max
匹配,我就会知道它们没有修改。
我想知道的是,有什么方法可以在不修改数据类型的情况下做到这一点?我正在寻找任何类似于指针nullptr
的标准库实现,但它适用于int
或char
数据类型。我主要对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 的情况下初始化它们。
哪种解决方案最适合您,实际上取决于您的要求。
- 如何在自删除后将对象设置为nullptr
- 如何取消对nullptr的屏蔽,返回正确的对象
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 将指针设置为"nullptr"并不能防止双重删除?
- 不同语言中相同代码的不同行为
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 为什么我的节点在我设置后被设置为 nullptr = 新节点?
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 刚接触C++,难以理解语言的细微差别
- 为什么nullptr是核心语言的一部分,而nullptr_t是STL的一部分?
- 垃圾/默认值的替代项,沿 nullptr语言 - C++ 行