[C++] vector 초기화 시 v(), v[] 차이
vector v[]
vector<int> v[1001]
은 1001개의vector<int>
를 담고 있는 정적 배열이다.- 각 요소가 벡터이므로, 각 인덱스마다 서로 다른 정점의 연결 정보를 저장할 수 있다.
- 주로 그래프의 인접 리스트를 구현할 때 사용한다.
vector<int> graph[1001]; // 1001개의 벡터 배열 선언
// 정점 1에 연결된 정점 추가
graph[1].push_back(2);
graph[1].push_back(3);
// 정점 2에 연결된 정점 추가
graph[2].push_back(4);
graph[2].push_back(5);
// 정점 1에 연결된 모든 정점 출력
for (int i = 0; i < graph[1].size(); i++) {
cout << graph[1][i] << " "; // 출력: 2 3
}
graph[i]가 각각 독립적인 벡터로 동작하므로, 그래프의 각 정점에 연결된 정점 목록을 별도로 저장할 수 있다.
vector v()
vector<int> v(1001)
은 크기가 1001인 단일 벡터를 생성한다.- 이 벡터는 하나의 정점에 연결된 정보를 저장할 때만 유용하며, 여러 정점에 대한 연결 정보는 표현할 수 없다.
- 즉, 단일 배열처럼 동작하며 인덱스를 통해 하나의 값을 저장할 수 있다.
vector<int> graph(1001); // 크기 1001인 단일 벡터 생성
graph[1] = 2; // 정점 1에 연결된 값을 저장 (하나의 값만 가능)
graph[2] = 4; // 정점 2에 연결된 값을 저장
cout << graph[1] << " " << graph[2]; // 출력: 2 4
하나의 정점에 대한 단일 값(또는 가중치)을 저장할 때 적합하며, 연결된 정점의 목록을 저장할 수 없다.
vector<int> v(5)
에서 v[1]=2
와 vector<int> v[5]
에서 v[1].push_back(2)
는 같은게 아닌지?
비슷해 보이지만 다르다.
vector<int> v(5)
- 크기가 5인 벡터 v생성하고, 각 요소는 기본값
0
으로 초기화 된다. v[1]=2
는 벡터의 두번째 요소(index 1)에 2를 할당하는 것- 즉 v[1]의 값은
0
에서2
로 변경
- 즉 v[1]의 값은
- v는
[0, 2, 0, 0, 0]
이 된다.
- 크기가 5인 벡터 v생성하고, 각 요소는 기본값
vector<int> v[5]
- 크기가 5인 배열 v를 선언
- 각 요소는
vector<int>
타입- 즉
v[0]
,v[1]
,v[2]
,v[3]
,v[4]
는 각각 빈vector<int>
이다.
- 즉
v[1].push_back(2)
는v[1]
벡터에2
를 추가하는 코드- v는
[{}, {2}, {}, {}, {}]
형태가 된다.