使用deque插入unsigned char数组

时间:2014-04-03 15:55:35

标签: c++ arrays deque

我想将二维char数组推送到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]);

2 个答案:

答案 0 :(得分:1)

你正在推回指针,而不是数组。如果那些数组死了,你的指针会摇晃。你没有告诉我们你的问题是什么,但这可能就是它。

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

如今,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]);
}

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

答案 1 :(得分: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]);

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