2011-01-21 3 views
1

대기열 벡터를 만드는 방법과 요소를 추가하는 방법은 무엇입니까? 벡터 내부의 큐 에 새 요소 -insert 벡터
에 새로운 큐 -insert
:대기열 벡터

나는 다음을 수행 할 수 있어야합니다.

: D

답변

9
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. 
+4

C++ 98에서 두 개의 꺾쇠 괄호 사이의 공백을 잊지 마십시오. 그렇지 않으면 오른쪽 시프트 연산자 인 – fredoverflow

+1

typedef의 FTW!로 해석됩니다. :) –

+1

@Moo :이 경우 동의하지 마십시오. @Fred : 사실, C++ 03. 그리고 나는 그렇지 않습니다. – ybungalobill

1

당신은 같은 것을 수행 할 수 있습니다

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; 
} 
1
typedef std::queue<int> IntQueue; 
typedef std::vector<IntQueue> IntQueueVector 
IntQueueVector myVector; 

1)

myVector.push_back(IntQueue()); 

2)

+1

유용한 typedef는 무엇입니까? : D 다음과 같이 좋을까요 : "vector > vec;"? – Cristy

+1

typedef를 사용하면 유형 별명을 지정할 수 있습니다. 그래서 std :: queue 을 쓰는 대신에, 그것은 단지'IntQueue'입니다. 벡터와 동일하지만 std :: vector 단지 IntQueueVector를 쓰지 마십시오. typedefs는 템플릿 클래스를 다룰 때 매우 유용합니다 :) –

+0

아, 고마워요. ... – Cristy

1

큐에는 std :: vector에서 사용할 수있는 의미가 있으므로 추가 할 때 다른 벡터처럼 사용할 수 있습니다. 예를 들어 push_back을 사용하여 벡터를 큐에 추가 할 수 있습니다.

대기열에 삽입하는 것은 한쪽 끝으로 밀어 넣을 수 있기 때문에 push()를 사용하는 것입니다. operator [] 예 : queuevec[i]을 통해 대기열에 액세스 할 수 있습니다. 여기서 i는 사용하려는 대기열의 번호입니다.

멀티 스레딩 컨텍스트에서 두 개의 다른 스레드가 잠금없이 벡터 내의 두 개의 다른 큐에 액세스하는 것이 안전하지만 두 스레드가 동일한 큐에 액세스하는 것이 안전하지 않습니다. 벡터에 대기열을 추가하면이 기간 동안 벡터의 다른 모든 대기열이 무효화 될 수 있으므로이 동작을 수행하려면 뮤텍스를 잠 가야합니다.