C++ vector 선언에서 중괄호, 대괄호 차이.

1point·2023년 5월 26일
0
#include <vector>
#include <iostream>
using namespace std;

int main(){
    vector<pair<int,int> > v1[100];
    vector<pair<int,int> > v2(100);
    
    v1[2].push_back(make_pair(1,1));
    cout<<v1[2][0].first<<' '<<v1[2][0].second;
}

를 출력해보면,
1 1 이 출력된다.
v1은 vector 를 선언할때 위와 같이 대괄호로 "[]" 선언을 해주면, 그냥 배열을 하나 선언해주고, 그배열 요소에 저장되어있는 주소에서 벡터로 동적할당을 해줄 수 있는거고, 그벡터의 각 요소의 자료형이 pair<int,int> 인것이다.
그림으로 확인해보자.

v2는 배열을 선언 해주고 정해진 주솟값에서 vector을 사용한 개념이 아닌, 진짜 vector 크기 100짜리 한줄을 만든것이다. 크기라고 하면 좀 애매할 수 도 있다. 그림으로 보자.

이런식이다. 차이를 알겠나? 본인은 겉에 배열이 덮여있고, 없고로 이해했다.

코드로 실험을 해보자.

#include <vector>
#include <iostream>
using namespace std;

int main(){
    vector<pair<int,int> > v1[100];
    vector<pair<int,int> > v2(100);

    v2[2].push_back(make_pair(1,1));
    cout<<v2[2][0].first<<' '<<v2[2][0].second;
}

맨처음 코드 에서 v2로만 바꿔준 것이다.
당연히 일차원 벡터인데 이차원배열에 역참조 하려고하니까 에러가난다.

#include <vector>
#include <iostream>
using namespace std;

int main(){
    vector<pair<int,int> > v1[100];
    vector<pair<int,int> > v2(100);

    v2[2]=make_pair(1,1);
    cout<<v2[2].first<<' '<<v2[2].second;
}

그냥 배열 역참조하듯이 코드를 작성했다. 역시 잘 작동한다.

자 한번만 더 해보자.

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<pair<int, int> > v1[101];
    vector<vector<pair<int, int> > > v2(101);

    v1[2].push_back(make_pair(1,2));
    v2[2].push_back(make_pair(1,2));
    cout << v1[2][0].first << ' ' << v2[2][0].second;
}

출력이 어떻게 될까?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
정답은 1 2 로 정상 출력된다.
저게 어떻게 같은 방법으로 입력을 받을 수 있는지 그림으로 나타내보자.

v1은 벡터가 담겨있는 공간이 크기 100짜리 array고,
v2는 벡터가 담겨있는 공간이 크기 100짜리 vector이다. 그래서 가능한것이다.

profile
Lv1 Bug

0개의 댓글