Å¥ È®Àå

Å¥¸¦ È®ÀåÇØ º¸ÀÚ.  ¾î¶² °æ¿ì¿¡ »ç¿ëÇÑÁö ¾Ë¾Æ º¸ÀÚ.

´ÙÀ½°ú °°Àº ±¸Á¶Ã¼°¡ ÀÖ°í stl Å¥¸¦ »ç¿ëÇÏ°í ÀÖ´Ù.
push , popÀ» ¿©·¯±ºµ¥ »ç¿ëÇÏ°í ÀÖ´Ù.
¿©±â¼­ ÇÁ·Î±×·¥ À¯¿¬¼ºÀ» È®º¸Çϱâ À§ÇØ ¹è¿­ ´ë½Å new, delete·Î ¸Þ¸ð¸® ÇÒ´ç ¹æ½ÄÀ¸·Î ¹Ù²Ù¾î º¸ÀÚ.

struct MemData
{
    char data[100];
};

¸Þ¸ð¸® ÇÒ´ç ¹æ½ÄÀ¸·Î ¹Ù²Ù°í º¹»ç »ý¼ºÀÚ¸¦ ¸¸µç´Ù.

#define BUFF_SIZE  4

struct MemData
{
    char* data;
    MemData& operator =(const MemData& v)
    {
        memcpy(this->data, v.data, BUFF_SIZE);
        return (*this);
    }
};

º¹»ç »ý¼ºÀÚ¸¦ ¸¸µå´Â ÀÌÀ¯´Â ±âÁ¸ Äڵ忡¼­ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ°í Àֱ⠶§¹®ÀÌ´Ù.

MemData a;
MemData b;

a = b;

±¸Á¶Ã¼¿¡¼­ ¹è¿­À» »ç¿ëÇÏ°í ÀÖÀ¸¸é ¾Ë¾Æ¼­ º¹»ç ÇØÁØ´Ù.
¸Þ¸ð¸® ¹æ½ÄÀ¸·Î ¹Ù²Ù¸é Æ÷ÀÎÅ͸¸ Àü´Þ µÇ±â ¶§¹®¿¡ º¹»ç »ý¼ºÀÚ¸¦ ¸¸µé¾î ¹öÆÛ¸¦ º¹»çÇÑ´Ù.

stl queueÀÇ push, popÀ϶§´Â ¸Þ¸ð¸®°¡ º¹»ç ¾ÈµÈ´Ù.
push¸¦ ¿©·¯¹ø ÇÏ¸é ¸Þ¸ð¸® Æ÷ÀÎÅ͸¸ Àü´ÞµÈ´Ù.

push, pop ÇÒ¶§ ¸Þ¸ð¸® »ý¼º,  Á¦°Å, º¹»ç¸¦ ±¸ÇöÇØÁà¾ß ÇÑ´Ù.
óÀ½¿¡´Â ÇÔ¼ö¸¦ ¸¸µé¾î ÇØ°áÇÒ·Á°í Çß´Ù.  ±âÁ¸¿¡ push, popÀÌ ³Ê¹« ¸¹°í QA ÇÒ¾çÀÌ ¸¹°í ½±Áöµµ ¾Ê±â ¶§¹®¿¡
ÃÖ¼ÒÇÑÀ¸·Î °íÄ¥¼ö ÀÖ´Â ¹æ¹ýÀ» ã¾Æ º¸¾Ò´Ù.

MemData Àü¿ë Å¥¸¦ ¸¸µé¾ú´Ù.
push ÇÒ¶§ ¸Þ¸ð¸®¸¦ »ý¼ºÇÏ°í
"d = element"´Â º¹»ç »ý¼ºÀÚ¿¡ ÀÇÇØ ¸Þ¸ð¸®¸¦ º¹»çÇÑ´Ù.
pop ÇÒ¶§ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù.

struct QueueExt : std::queue<MemData>
{
    void push(const MemData& element)
    {
        MemData d;
        d.data = new char[BUFF_SIZE];
        d = element;
        std::queue<MemData>::push(d);
    }

    void pop()
    {
        MemData d = std::queue<MemData>::front();
        if(d.data)
            delete [] d.data;
        std::queue<MemData>::pop();
    }
};

QueueExt gQueue;

Å¥ ¼±¾ð¸¸ ¼öÁ¤ÇÏ¸é ³¡ÀÌ´Ù.

Àüü ¿¹Á¦ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

#include <stdio.h>
#include <queue>

#define BUFF_SIZE  4

struct MemData
{
    char* data;
    MemData& operator =(const MemData& v)
    {
        memcpy(this->data, v.data, BUFF_SIZE);
        return (*this);
    }
};

struct QueueExt : std::queue<MemData>
{
    void push(const MemData& element)
    {
        MemData d;
        d.data = new char[BUFF_SIZE];
        d = element;
        std::queue<MemData>::push(d);
    }

    void pop()
    {
        MemData d = std::queue<MemData>::front();
        if(d.data)
            delete [] d.data;
        std::queue<MemData>::pop();
    }
};

QueueExt gQueue;

int main(int argc, char* argv[])
{
    MemData a;
    MemData b;
    a.data = new char[4];
    b.data = new char[4];

    b.data[0] = 77;
    b.data[1] = 88;
    b.data[2] = 99;
    b.data[3] = 33;

    memset(a.data, 3, 4);
    gQueue.push(b);
    a = gQueue.front();
    gQueue.pop();

    delete a.data;
    delete b.data;
    return 0;
}

Âü°í)
https://stackoverflow.com/questions/6806000/call-function-when-items-are-added-or-removed-from-a-vector