【问题标题】:Vector of queues队列向量
【发布时间】:2011-01-21 11:51:25
【问题描述】:

如何创建队列向量,如何添加元素?

我希望能够做到以下几点:
- 在向量中插入一个新队列
- 将新元素插入队列 那在向量里面。

:D

【问题讨论】:

    标签: c++ vector queue


    【解决方案1】:
    vector<queue<int>> vec; // vector of queues
    vec.push_back(queue<int>()); // add a queue
    vec[0].push(1); // push 1 into queue number 0.
    

    【讨论】:

    • 不要忘记 C++98 中两个右尖括号之间的空格,否则它们会被解释为右移运算符 ;-)
    【解决方案2】:

    你可以这样做:

    int main( void )
    {
        typedef std::queue<int> Q;
        std::vector<Q> v;
    
        //Add a new queue to vector
        v.push_back(Q());
    
        //Add an element to the queue
        v[0].push(1);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:
      typedef std::queue<int> IntQueue;
      typedef std::vector<IntQueue> IntQueueVector
      IntQueueVector myVector;
      

      1)

      myVector.push_back(IntQueue());
      

      2)

      myVector.back().push(1);
      

      【讨论】:

      • typedef 有什么用处?:D 那么是不是更好:"vector> vec;"?
      • typedef 允许您指定类型别名。所以不是写 std::queueeverywere,而是 IntQueue。向量也一样,你不写 std::vector 只是 IntQueueVector。 typedef 在处理模板类时非常很有用:)
      • @Moo:恭喜,您在 std::queue 中保存了 7 个字符,大约需要 1.5 秒的打字时间。现在,当我查看 IntQueue 时,我真的不知道它是什么类型,std::queue?标准::双端队列? std::priority_queue? SomeLibrary::queue?
      • @ybungalobill,不管输入什么,typedef 都有其他原因。如果您仍在使用 VI 进行编码,我很抱歉,但是当我将鼠标悬停时,我的 IDE 会告诉我底层类型是什么;)
      • @Moo:我使用 MVS,但我不使用鼠标。
      【解决方案4】:

      queue 具有允许它在 std::vector 中使用的语义,因此您可以在添加时像任何其他向量一样使用它,例如使用 push_back 将队列添加到向量中。

      使用 push() 插入队列,因为您只能推入一端。您可以通过 operator[] 访问队列,例如queuevec[i],其中 i 是您希望使用的队列号。

      如果在多线程上下文中使用它,则两个不同的线程可以安全地访问向量中的两个不同队列而无需锁定,但两个线程访问同一个队列是不安全的。如果您将队列添加到向量,这可能会使向量中的所有其他队列在此期间被“移动”无效,因此您需要锁定互斥体才能执行此操作。

      【讨论】:

        猜你喜欢
        • 2015-05-01
        • 1970-01-01
        • 2021-11-07
        • 2020-05-09
        • 1970-01-01
        • 2018-05-18
        • 2016-06-06
        • 2015-02-01
        • 1970-01-01
        相关资源
        最近更新 更多