[C++] vector쓸 시 주의할 점

2021. 3. 30. 12:43 기타/C++

 

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]



출처: https://engkimbs.tistory.com/49?category=688856 [새로비]

'기타 > 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