C++ 에서 vector를 선언할 시, 크기 선언을 ()괄호로 하는 방법과, []괄호로 하는 방법이 있다.
이 두가지 선언 방법의 차이점
- []괄호로 크기 선언시 해당 벡터의 원소 인덱스 마다 동적으로 크기 할당을 할 수 있다.
- ()괄호로 크기 선언시, 선언한 크기만큼 공간을 만든 후, 초기화를 한다.
즉, [] 괄호는 크기가 동적으로늘어나나, 텅 빈 배열이라 보면 되고, () 괄호로 선언 시, 해당 크기만큼만
초기화를 시켜준다.
예시
[] 괄호로 벡터 선언시
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> vec[100];
for (int i = 0; i < 100; i++)
{
vec[1].push_back(i);
}
for (int i : vec[1])
{
cout << i << " ";
}
}
해당 코드 실행 시 결과 창이다.
실제로 [] 괄호로 선언을 할 경우, 할당한 크기를 벗어날 경우, 오류가 발생하게된다.
아래는 크기를 100으로 선언하였으나, 101개의 인덱스를 탐색하려 할때 오류가 발생하는 코드이다.
() 괄호로 벡터 선언 시
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> vec(100);
for (int i = 0; i < 100; i++)
{
vec.push_back(i);
}
for (int i : vec)
{
cout << i << " ";
}
}
해당코드 실행 창이다.
이미 출력되는 수를 보면 선언한 100의 크기를 한참 벗어나있다.
즉, () 괄호로 선언을 하면 선언한 크기는 크게 의미가 없다.
하지만 ()괄호로 선언을 하더라도, 동적으로 크기가 늘어나는 것은 확인할 수 있다.
결론
즉, 동적으로 사용하되, 초기화가 되어있는 1차원 배열 벡터를 사용하고싶을 경우는 () 괄호,
크기가 동적으로 변하는 여러개의 배열을 사용하고싶지만 초기화를 할 필요는 없을 경우는 [] 괄호를 사용하면 되겠다.
'🔥 Programming > C++' 카테고리의 다른 글
[C/C++] 동적할당 malloc, calloc, realloc들의 차이란? (0) | 2023.01.10 |
---|---|
[C/C++] C++ auto keyword의 장점과 단점 (0) | 2022.11.27 |
[C/C++] C++ 배열 초기화 (std::fill_n, std::fill, memset) (0) | 2022.10.13 |
[C/C++] C++ ios_base::sync_with_stdio(false), cin.tie(0) (0) | 2022.08.19 |