使用 deque 插入无符号字符数组

Using deque to insert unsigned char arrays

本文关键字:字符 数组 无符号 插入 deque 使用      更新时间:2023-10-16

我想将二维字符数组push_back成deque。以下方法不起作用。应如何定义数据变量m_message以便push_back这些数据。

unsigned char message_data[2][1500]; //definition
func1(message_data[0]);
func1(message_data[1]);
std::deque<unsigned char*> m_messagedata;
m_messagedata.push_back(&message_data[0]);
m_messagedata.push_back(&message_data[1]);

你推回指针,而不是数组。如果这些数组死亡,您的指针将晃来晃去。您没有告诉我们您的问题是什么,但很可能就是这样。

此外,您似乎正在声明两个具有相同名称,具有不同边界的数组,其中一个是非法的(0)。我认为这是您的问题的错误,而不是您的原始代码:请下次发布您的真实测试用例。

如今,C++有一个包装器,它围绕着以前不可复制的数组,允许它们直接存储在标准容器中;这个包装器被称为std::array。因此,请尝试:

#include <array>
#include <deque>
typedef std::array<unsigned char, 1500> ArrayType;
int main()
{
   std::array<ArrayType, 2> message_data;
   std::deque<ArrayType> q;
   q.push_back(message_data[0]);
   q.push_back(message_data[1]);
}

请注意,容器现在包含两个内部数组的副本

其他解决方案是正确的,但由于您希望代码尽可能保持不变,因此您可以这样做:

unsigned char message_data[2][1500]; //definition
//using CharArrPtr = unsigned char(*)[1500];
typedef unsigned char (*CharArrPtr)[1500];
std::deque<CharArrPtr> m_messagedata;
m_messagedata.push_back(&message_data[0]);
m_messagedata.push_back(&message_data[1]);

如前所述,这里所做的是将指针推送到可能的局部变量。因此,您必须确保它们在使用时仍然有效。