Вектор очередей - PullRequest
       6

Вектор очередей

2 голосов
/ 21 января 2011

Как создать вектор очередей и как добавить элементы?

Я хочу иметь возможность сделать следующее:
-вставить новую очередь в вектор
-вставить aновый элемент в очереди внутри вектора.

: D

Ответы [ 4 ]

9 голосов
/ 21 января 2011
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.
1 голос
/ 21 января 2011
Очередь

имеет семантику, которая позволяет использовать ее в std :: vector, так что вы можете просто использовать ее, как и любой другой вектор, когда добавляете, например, использовать push_back для добавления очереди в вектор.

Вставка в очередь выполняется с помощью push (), поскольку вы можете вставить только один конец.Вы можете получить доступ к очереди через оператор [], например, queuevec[i], где i - номер очереди, которую вы хотите использовать.

Если это используется в многопоточном контексте, это безопасно для двух разныхпотоки для доступа к двум различным очередям внутри вектора без блокировки, но для двух потоков небезопасно обращаться к одной и той же очереди.Если вы добавите очередь к вектору, это может сделать недействительными все другие очереди в векторе в течение этого периода, если они «перемещаются», поэтому вам потребуется заблокировать мьютекс для выполнения этого действия.

1 голос
/ 21 января 2011
typedef std::queue<int> IntQueue;
typedef std::vector<IntQueue> IntQueueVector
IntQueueVector myVector;

1)

myVector.push_back(IntQueue());

2)

myVector.back().push(1);
1 голос
/ 21 января 2011

Вы можете сделать что-то вроде этого:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...