int main() {
int n;
cin >> n;
vector<int> v[n];
for (int i=0; i<n; i++) {
v[i].push_bakc(i);
}
}
...? 정적 배열 선언 안에 변수가 들어가면 동적이 되는데 이게 왜 오류가 안나지
int main() {
int n;
cin >> n;
vector<int> v[n];
for (int i=0; i<n; i++) {
v[i].push_bakc(i);
}
}
...? 정적 배열 선언 안에 변수가 들어가면 동적이 되는데 이게 왜 오류가 안나지
요즘 컴파일러는 되더라
어떻게 작동하길래 되는겨
컴파일러에서 이중 벡터로 변환해줌?????
아니 ㅋㅋㅋㅋ int a[n]도 선언이 되네 이게 왜 돼...?
v[i] type이 vector 잖음 여기에 push_back 하는건 문제 없지
내가 선언을 이중벡터로안하고 정적으로 선언했음 원래 저렇게 선언하려면 이중벡터 써야하잖아
포인트가 이게 아니었군
VLA라고 배열 길이를 변수로 설정해도 컴파일러가 알아서 스택에 맞게 할당해줌
https://int-i.github.io/cpp/2020-05-10/vla/
https://en.wikipedia.org/wiki/Variable-length_array
걍그럼 저렇게 써도 되는거임? 문제없어?
대부분의 경우에는 문제 없지만 어디까지나 스택에 할당된다는 점은 똑같아서 간혹 스택 메모리 제한이 터질 수 있음
이중벡터 길이도 길어서 쓰기 힘들었는데 걍 저렇게 쓰면 되네 개꿀
VLA(Variable Length Array)는 대부분의 컴파일러에선 지원하는데, 비주얼 스튜디오가 쓰는 VC++은 지원 안함.
사실 저거 지원해주는게 표준
저러면 왜인지 메모리 조금더 적게씀
bakc