C++ 存储大量不同类型数据的最佳方法?
我想存储一个缓冲区C++ 存储大量不同类型数据的最佳方法?,c++,types,stl,C++,Types,Stl,我想存储一个缓冲区数据。我必须以字节、单词和DWORD的形式将数据附加到数据中。实现数据的最佳方法是什么?STL中是否有用于此的内容?从您刚才所说的内容来看,似乎您希望在STL容器中有不同的类型。有两种方法可以做到这一点: 拥有对象的层次结构并存储指向它们的引用/指针(即std::vector 使用(即std::vector) 如果您需要与一些遗留代码 C 代码进行连接,或者通过网络发送原始数据,这可能不是最好的解决方案。 < P>如果要创建一个完全非结构化数据的连续缓冲区,请考虑使用 STD:
数据
。我必须以字节、单词和DWORD的形式将数据附加到数据中。实现数据的最佳方法是什么?STL中是否有用于此的内容?从您刚才所说的内容来看,似乎您希望在STL容器中有不同的类型。有两种方法可以做到这一点:
拥有对象的层次结构并存储指向它们的引用/指针(即std::vector
使用(即std::vector
)
如果您需要与一些遗留代码<代码> C <代码>代码进行连接,或者通过网络发送原始数据,这可能不是最好的解决方案。
< P>如果要创建一个完全非结构化数据的连续缓冲区,请考虑使用<代码> STD::向量< /代码>:
//将项添加到缓冲区的末尾,忽略endian问题
样板
addToVector(标准::vector&v,T)
{
v、 插入(v.end(),重新解释转换(&t),重新解释转换(&t+1));
}
//在缓冲区的末尾添加一个项目,并保持一致的结尾
样板
addToVectorEndian(标准::vector&v,T)
{
对于(int i=0;i>=8;//或者更好:字符位
}
}
您存储的数据必须具有某种结构。您能给出一些数据示例吗?在缓冲区包含数据后,您还需要对其执行哪些其他操作?您需要记住内容的类型还是仅仅是一大块原始字节?您定义“最佳”的标准是什么?您喜欢存储所使用的大小、代码的复杂度或速度吗?根据您对该问题的回答,解决方案可能会有所不同。您可以尝试std::tuple,但有一些注意事项:
// Add an item to the end of the buffer, ignoring endian issues
template<class T>
addToVector(std::vector<char>& v, T t)
{
v.insert(v.end(), reinterpret_cast<char*>(&t), reinterpret_cast<char*>(&t+1));
}
// Add an item to end of the buffer, with consistent endianness
template<class T>
addToVectorEndian(std::vector<char>&v, T t)
{
for(int i = 0; i < sizeof(T); ++i) {
v.push_back(t);
t >>= 8; // Or, better: CHAR_BIT
}
}