gpt4 book ai didi

C++创建具有可变数量项目的结构的方法

转载 作者:太空狗 更新时间:2023-10-29 21:33:39 25 4
gpt4 key购买 nike

我需要在末尾创建一个包含可变数量项目的内存区域。我可以这样写的东西:

#pragma pack(push,0)
struct MyData
{
int noOfItems;
int buffer[0];
};
#pragma pack(pop)

MyData * getData(int size)
{
bufferSize = size* sizeof(int) + sizeof(MyData ::noOfItems);
MyData * myData= (MyData *)new char[m_bufferSize];
return myData;
}

此代码在 VS 2015 上运行,并警告大小为零的数组不是标准

一些搜索告诉我这是一个 C hack,并且在 C++ 上不受支持。

Array with size 0

Array of zero length

What happens if I define a 0-size array in C/C++? .

我如何在 C++ 中做到这一点

最佳答案

像这样的事情呢?它适用于trivially copyable 类型:

template <typename T, typename INT = size_t>
class packed_array {
public:
packed_array(INT size) {
buf_ = new char[sizeof(INT) + size * sizeof(T)];
memcpy(buf_, &size, sizeof(INT));
}
~packed_array() { delete[] buf_; }

void set(INT index, T val) {
memcpy(buf_ + sizeof(INT) + index * sizeof(T), &val, sizeof(T));
}
T get(INT index) const {
T temp;
memcpy(&temp, buf_ + sizeof(INT) + index * sizeof(T), sizeof(T));
return temp;
}

const char* data() const { return buf_; }

private:
char* buf_;

static_assert(std::is_trivially_copyable<T>::value);
};

int main() {
int n;
std::cin >> n;
packed_array<double, int> a(n);
for (int i = 0; i < n; i++)
a.set(i, pow(2.0, i));
for (int i = 0; i < n; i++)
std::cout << a.get(i) << std::endl;
}

现场演示:https://wandbox.org/permlink/Vc4ok756R1Sxieoj

关于C++创建具有可变数量项目的结构的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50566828/

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