C ++ vector或Queue在内存和速度方面构建大Q.

时间:2013-01-15 10:36:12

标签: c++ performance vector queue

我正在构建一个庞大的消息队列,并且仅使用PUSH和POP,这样可以更有效地(向量或队列)以最大速度维护大数据

struct MQStruct {
    wchar_t *serviceName; 
    int durability; 
    int msgType; 
    int msgHeader; 
    wchar_t *msgId; 
    wchar_t *payload; 
    int payloadSize; 
    int ttl; 
    int priority;
}MQStructObj;

vector<MQStruct> MQvector;
queue<MQStruct> MSQ;

int SendMessage(wchar_t *serviceName, int durability, int msgType, int msgHeader, wchar_t *msgId, wchar_t *payload, int payloadSize, int ttl, int priority) {

MQStructObj.serviceName=serviceName;
MQStructObj.durability=durability;
MQStructObj.msgType=msgType;
MQStructObj.msgHeader=msgHeader;
MQStructObj.msgId=msgId;
MQStructObj.payload=payload;
MQStructObj.payloadSize=payloadSize;
MQStructObj.ttl=ttl;
MQStructObj.priority=priority;

    //Which one is better (Vector or Queue) in term of memory, speed and why

MSQ.push(MQStructObj);

    //OR

MQvector.push_back(MQStructObj);


return 0;
}

2 个答案:

答案 0 :(得分:16)

关于SO的队列/矢量/列表有很多讨论,你可以搜索和重用资源。简而言之:

  • 使用std::queue:如果您需要快速插入和删除它的开头和 结束;
  • 如果您需要随机访问元素
  • ,请使用std::vector
  • 当从中间频繁插入和删除时 您需要的序列std::list

由于您只对容器使用推送/弹出,因此std::queue代替std::vector是肯定的。

您可以从http://en.cppreference.com/w/cpp/container

获取更多详细信息

答案 1 :(得分:4)

使用std::vector您无法有效地模拟队列 - 您可能只能从容器的一侧推送和POP。如果您需要实现消息队列,那么请使用队列,这就是它的意思。