【问题标题】:How can I add the value at the beginning of queue如何在队列开头添加值
【发布时间】: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。 (如果你有排在前面的习惯,你应该立即停下来,这很粗鲁。)
  • 谢谢。那么,我可以删除结果指针吗?

标签: c++ g++ queue


【解决方案1】:

根据here的定义:

std::queue 类是一个容器适配器,为程序员提供 队列的功能 - 具体来说,FIFO(先进先出, 先出)数据结构。

这意味着如果你需要在 beging 中插入元素,你需要另一个抽象。例如std::deque(双端队列)。

【讨论】:

  • 谢谢。所以,我有其他想法,首先将队列中的所有值初始化为零值(4+4=8 个零值)。然后我将队列中的第 4 个值替换为 0,1,2...是否可能
  • @user8430 这里是answer,应该可以帮助您选择合适的容器。
  • @user8430 你可以用delete result; 来做。但最好使用堆栈分配的变量(如果可能的话)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2013-06-13
相关资源
最近更新 更多