[C++] vector쓸 시 주의할 점
vector는 C++ STL에서 쓰이는 선형 자료구조입니다.
이 vector를 쓸 때는 주의해야할 점이 있습니다. 바로 vector를 다른 vector에 대입할 때죠.
vector는 기본적으로 다른 vector에 대입될 때 모든 요소들을 그 벡터에 복사하게 됩니다. 그럼으로써, 오버헤드가 발생하게 되죠.
int main(void)
{
int N = 100000;
vector<int> test(N, -1);
// Code
for(int i=0; i< N; ++i){
vector<int> dummy = test;
}
//
}
위의 코드는 상당히 단순합니다. -1을 N만큼 초기화한 vector를 또 N만큼 반복하여 다른 벡터에 복사하는 코드죠. 이 코드의 수행 시간은 다음과 같습니다.
[Finished in 3.8s]
만일 단순히 vector의 요소들을 따로 복사를 하지 않아도 처리할 수 있는 일을 한다면 위의 코드는 너무나도 비효율적입니다. N이 적당히 큰 수라서 망정이지 훨신 더 큰 수였다면 엄청난 오버헤드가 발생할 겁니다.
따라서 이걸 방지하기 위해서는 &연산자를 사용하여 vector메모리를 참조하는 방식으로 코드를 작성하는 것이 좋습니다.
int main(void)
{
int N = 100000;
vector<int> test(N, -1);
// Code
for(int i=0; i< N; ++i){
vector<int>& dummy = test; // &사용하여 참조
}
//
}
[Finished in 0.6s]
'기타 > C++' 카테고리의 다른 글
[C++] volatile (0) | 2021.03.30 |
---|---|
[C++] 얕은 복사, 깊은 복사 (0) | 2021.03.30 |
[C++] virtual function 동작 방식 (0) | 2021.03.30 |
[C++] lambda 식 (0) | 2021.03.30 |
[C++] 시간 측정 (0) | 2021.03.30 |
[C++] 표준 출력 정확도 조정 (0) | 2021.03.30 |
[C++] 범위 지정 연산자(::)와 namespace (0) | 2021.03.30 |
[C++] 표준 입출력 (0) | 2021.03.30 |