我需要一个整数 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/