코딩 테스트 문제를 풀다가 테스트 마다 2차원 벡터를 초기화해야 하는 문제가 있었다.
clear와 assign을 사용한 초기화는 사용 목적과 효율성에서 차이가 있다.
📌 clear
vector<int> adj[1004];
for (int i = 0; i < n; i++) {
adj[i].clear(); // 기존 데이터를 비움, 메모리는 유지
}
📌 assign
vector<vector<int>> adj;
adj.assign(n + 1, vector<int>()); // n+1개의 빈 벡터로 초기화
📌 차이점 정리
특징 | clear() | assign() |
기존 메모리 재사용 | O (메모리 유지) | X(새로운 크기나 값 설정 시 재할당) |
효율성 | 더 빠름(메모리 해제하지 않음) | 다소 느릴 수 있음(재할당 필요시) |
크기 변경 | 불가능 | 가능 |
값 초기화 | 불가능(빈 상태로 만듦) | 가능(특정 값으로 초기화 가능) |
추천 상황 | 크기가 고정되고 데이터만 비워야할 때 | 크기가 가변적이거나 특정 값으로 초기화할 때 |
추가로, 벡터 초기화 방법에는 fill, memset, 변수에 재할당도 존재한다.
'C++' 카테고리의 다른 글
[C++] 벡터 요소의 합 구하기 accumulate (1) | 2024.12.23 |
---|---|
[C++] main(int argc, char *arvg[]) (0) | 2023.03.07 |
[C++] ios_base::sync_with_stdio(0) (0) | 2023.03.07 |
[C++] 지역변수, 전역변수, 정적변수, 외부변수 (0) | 2023.02.23 |
[C++] 배열, 구조체 (0) | 2023.02.23 |