c++ - 负零整数

标签 c++ vector int variant negative-zero

我需要一个整数 vector ,在这里我可以区分0和-0。
到目前为止,我已经想到了为这种特殊情况定义一个称为zero_int的新类的想法。

但是,现在我不能将普通整数和zero_int都压入同一 vector 中。
解决方案std::variant的大小为8字节,我需要保留每个变量4的大小。
定义虚拟基类my_int并将zero_int设置为其派生类会将zero_int的大小增加到32字节...

我知道一个人可以使用类似vector<void*>的方法,但是我不知道怎么做。-另外,指针 vector 中的指针所指向的对象是否在内存中是连续的? -在这种情况下,这一点很重要。

我将不胜感激有关如何解决此问题的任何建议

最佳答案

The solution std::variant has the size of 8 Bytes and I need to retain the size of 4 per variable..



这是不可能的,除非您不介意丢失一个可能的非零int值。

这将我们带到“显而易见的”解决方案:将0视为-0,并将每个正数视为其自身减去1。
    vec[i]:  -5 -4 -3 -2 -1  0 +1 +2 +3 +4 +5
my "value":  -5 -4 -3 -2 -1 -0 +0 +1 +2 +3 +4

(或者以其他方式进行操作,这可以使您在正负范围内保持对称;无论您喜欢什么。)

使任何类包装您的 vector ,以适合您项目的任何方式处理此“映射”。

are objects pointed to by the pointers in a vector of pointers contiguous in memory??



没有。

您不想在这里更多间接。

有人会建议使用浮点,因为IEEE 754支持带符号的零。但是,我认为在任何情况下切换到浮点数来表示实数都可能带来比解决方案更多的问题。

关于c++ - 负零整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62330864/

相关文章:

c++ - 使用管理器和 vector 时出现内存错误

java - 模数转换与字符串<->整数转换哪个更密集?

c++ - valgrind 中函数指针的读取大小无效

c++ - 如何将代码签名算法的 OID 从 CRYPT_ALGORITHM_IDENTIFIER 转换为人类可读的字符串?

C++ Qt QString 用一个替换双反斜杠

java - Java 中 vector 的点积/标量积

c++ - 什么是 "compatibility for C++ mangling"?

c++ - 打印出存储在 vector 中的字符串

java - 如何拥有一个由数组 : Java? 索引的数组

c++ - 整数值的缩放(来自 float )