【发布时间】:2015-12-28 11:50:57
【问题描述】:
我有一个定义为的队列
queue<CData*> queue1;
CData在哪个类
typedef unsigned char U8;
typedef unsigned int U32;
class CData
{
private:
U8* m_Data;
U32 m_Len;
public:
CData(void) : m_Data(NULL), m_Len(0)
{
}
~CData(void)
{
FreeData();
}
void FreeData()
{
if (m_Data)
{
delete[] m_Data;
m_Data = NULL;
}
}
};
我假设我的 queue1 被初始化为下面的代码
for (U32 k = 0; k<5; k++)
{
size_t data_size = 1;
U8 *data_buf = new U8[data_size];
for (size_t i = 0; i < data_size; ++i)
{
data_buf[i] = k;
}
CData* result = new CData(data_buf, data_size);
queue1.push(result);
delete[] data_buf;
data_buf = NULL;
}
现在,我的 queue1 将包含值
0 1 2 3 4
我的问题是如何在 queue1 的开头插入 3 个零值,以便结果为
0 0 0 0 1 2 3 4
其次,我怎样才能释放/删除 queue1 ,应用程序完成后。如果我使用
CData* result = new CData();
如何删除result 变量?我在 Ubuntu 中使用 C++。提前致谢。
【问题讨论】:
-
你应该一次问一个问题。
-
谢谢。只是考虑首先在队列前面增加价值
-
据我所知,您不能在队列的前面添加元素。我改用 std::list 或 std::deque 。无论如何,std::queue 只是其中一个的包装器。另一种方法是将整个队列复制到一个新队列的末尾,该队列已经包含必要的前端元素。
-
如果要两端添加,不是队列而是deque。 (如果你有排在前面的习惯,你应该立即停下来,这很粗鲁。)
-
谢谢。那么,我可以删除结果指针吗?