컴퓨터공학/기타 프로그래밍

[C++] vector <queue<int>> 그리고 vector<pair<int,int>>

TaeGyeong Lee 2023. 11. 20. 17:11

개요

참 많이 헷갈립니다. 

 

vector <queue<int>>

자유롭게 추가/삭제 가능한 queue<int>의 집합입니다.

#1 예제 코드

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int main() {
    vector<queue<int>> vecOfQueues;

    for (int i = 0; i < 3; ++i) {
        queue<int> q;
        for (int j = 1; j <= 5; ++j) {
            q.push(i * 5 + j);
        }
        vecOfQueues.push_back(q);
    }

    return 0;
}

 

#2 예제 코드 도식화

위 예제 코드 실행 후 메모리에 저장되는 vector<queue<int>> 자료형 vecOfQueues는 다음과 같이 나타낼 수 있습니다.

 +---+---+---+---+---+
   | 1 | 2 | 3 | 4 | 5 |  --> Queue 1
   +---+---+---+---+---+
   | 6 | 7 | 8 | 9 | 10|  --> Queue 2
   +---+---+---+---+---+
   |11 |12 |13 |14 |15 |  --> Queue 3
   +---+---+---+---+---+

 

vector<queue<int>> vecOfQueues[1001]

#1 예제 코드

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int main() {
    vector<queue<int>> vecOfQueues[1001];

    for (int i = 0; i < 3; ++i) {
        queue<int> q;
        for (int j = 1; j <= 5; ++j) {
            q.push(i * 5 + j);
        }
        vecOfQueues[i].push_back(q);
    }

    return 0;
}

 

#2 예제 코드 도식화

이 벡터는 queue<int> 자료형을 자유롭게 추가/삭제할 수 있는 벡터 1001개를 가집니다. 

vecOfQueues[1][0].front() 는 6이고, vecOfQueues[1][1].front(); 는 존재하지 않으므로 런타임 에러가 발생합니다. ( 예제 코드에서 각 벡터에 queue <int> 하나씩만을 넣었으므로 0번째 인덱스에만 queue <int> 가 존재 )

+--------------------------------------------------------------------------+
|                                                                          |
|  +------------------------+  +------------------------+  +------------------------+
|  | vecOfQueues[0]         |  | vecOfQueues[1]         |  | vecOfQueues[2]         |
|  |                        |  |                        |  |                        |
|  |  +---+---+---+---+---+ |  |  +---+---+---+---+---+ |  |  +---+---+---+---+---+ |
|  |  | 1 | 2 | 3 | 4 | 5 | |  |  | 6 | 7 | 8 | 9 |10 | |  |  |11 |12 |13 |14 |15 | |
|  |  +---+---+---+---+---+ |  |  +---+---+---+---+---+ |  |  +---+---+---+---+---+ |
|  +------------------------+  +------------------------+  +------------------------+
|                                                                          |
+--------------------------------------------------------------------------+

만약 vecOfQueues[1]에 모든 queue<int> 를 담은 경우 아래와 같게 될 수도 있겠죠?

+------------------------+
| vecOfQueues[1]         |
|                        |
|  +---+---+---+---+---+ |
|  | 1 | 2 | 3 | 4 | 5 | |
|  +---+---+---+---+---+ |
|  | 6 | 7 | 8 | 9 |10 | |
|  +---+---+---+---+---+ |
|  |11 |12 |13 |14 |15 | |
|  +---+---+---+---+---+ |
+------------------------+

 

vector<pair<int, int>>

자유롭게 추가/삭제 가능한 pair<int,int> 의 집합입니다.

#1 예제 코드

#include <iostream>
#include <vector>
#include <utility>

using namespace std;

int main() {
    vector<pair<int, int>> vecOfPairs;

    for (int i = 1; i <= 5; ++i) {
        vecOfPairs.push_back(make_pair(i, i * i));
    }

    return 0;
}

 

#2 예제 코드 도식화

 Pair 1: (1, 1)
   Pair 2: (2, 4)
   Pair 3: (3, 9)
   Pair 4: (4, 16)
   Pair 5: (5, 25)