컴퓨터 관련 용어

[컴퓨터 관련 용어_16] 배열, 벡터, 리스트.. 그냥 배열만 쓰면 안 돼? 굳이 다 알아야 하나...?

n_0_jun 2023. 12. 7. 14:00
반응형

출처 : https://www.inflearn.com/course/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1

배열은 특정 상황에서 적합하지만, 벡터와 리스트도 각각의 장점이 있습니다. 어떤 자료 구조를 선택할지는 사용하려는 상황과 요구사항에 따라 다릅니다.

배열을 사용하는 경우:

#include <iostream>

int main() {
    const int size = 5;
    int arr[size] = {1, 2, 3, 4, 5};

    // 배열 출력
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << ' ';
    }

    return 0;
}

1. 크기가 고정되어 있을 때: 만약 프로그램에서 사용할 데이터의 크기가 고정되어 있고, 크기 변경이 필요 없는 경우 배열을 사용하는 것이 간단하고 효율적일 수 있습니다.

2. 인덱스를 통한 빠른 접근이 필요할 때: 배열은 메모리에 연속적으로 할당되어 있어 인덱스를 통한 빠른 접근이 가능합니다.



벡터를 사용하는 경우:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 벡터 출력
    for (int element : vec) {
        std::cout << element << ' ';
    }

    return 0;
}



1. 크기가 동적으로 변경될 때: 프로그램이 실행되는 동안 크기가 동적으로 변경되어야 하는 경우에는 벡터가 유용합니다.

2. 요소의 추가와 삭제가 빈번할 때: 벡터는 동적으로 크기가 조절되므로 데이터의 추가나 삭제가 빠르고 효율적입니다.

3. STL의 다양한 함수 활용이 필요할 때: 벡터는 Standard Template Library (STL)의 다양한 함수들과 함께 사용되어 편리하게 데이터를 다룰 수 있습니다.



리스트를 사용하는 경우:

#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};

    // 리스트 출력
    for (int element : myList) {
        std::cout << element << ' ';
    }

    return 0;
}

 

1. 중간 삽입 및 삭제가 빈번할 때: 리스트는 양 끝이 아닌 중간에 요소를 삽입하거나 삭제하는데 더 효율적입니다.

2. 자주 크기가 변경되는 경우: 크기가 동적으로 변경되지만, 벡터보다는 삽입/삭제 연산이 자주 발생하는 경우에 리스트가 유용합니다.

따라서, 어떤 자료 구조를 사용할지는 프로그램의 요구사항과 특정 상황에 따라 결정되어야 합니다. 프로그램의 성능과 효율성을 고려하여 최적의 자료 구조를 선택하는 것이 중요합니다.

 

효율성 측면에서는 어때?

효율성 면에서 배열, 벡터, 리스트는 각각 장단점이 있습니다. 여러 측면에서 비교해 보겠습니다.

배열:

1. 접근 속도: 배열은 메모리에 연속적으로 할당되어 있어 인덱스를 통한 빠른 접근이 가능합니다. O(1)의 시간복잡도를 갖습니다.
  
2. 크기 변경: 배열은 정적으로 할당되기 때문에 크기 변경이 어렵습니다.

벡터:

1. 접근 속도: 배열과 마찬가지로 인덱스를 통한 빠른 접근이 가능합니다.

2. 크기 변경: 동적으로 크기를 조절할 수 있으며, 크기 변경이 필요한 경우에도 비교적 효율적으로 수행됩니다. 크기를 변경할 때마다 일정 비용이 소요되지만, 일반적으로 상수 시간 내에 크기를 변경할 수 있습니다.



리스트:

1. 접근 속도: 리스트는 포인터로 연결되어 있기 때문에 인덱스를 통한 접근이 배열이나 벡터보다 느립니다. 특히 중간에 있는 요소에 접근할 때 O(n)의 시간복잡도를 갖습니다.

2. 크기 변경: 동적으로 크기를 조절할 수 있으며, 중간에 요소를 추가하거나 삭제하는 연산이 배열이나 벡터보다 빠릅니다. O(1)의 시간복잡도를 갖습니다.

 

결론:

- 접근 속도: 배열과 벡터는 인덱스를 통한 빠른 접근이 가능하며, 리스트는 중간에 있는 요소에 접근할 때 느립니다.
  
- 크기 변경: 배열은 정적으로 할당되어 크기 변경이 어렵지만, 벡터와 리스트는 동적으로 크기를 조절할 수 있습니다. 크기 변경이 많은 경우에는 벡터나 리스트를 고려할 수 있습니다.

따라서 특정 상황에 따라 최적의 자료 구조를 선택하는 것이 중요합니다. 배열은 단순하고 빠른 접근이 필요한 경우에 유용하며, 크기 변경이나 중간 삽입/삭제가 빈번한 경우에는 벡터나 리스트를 고려할 수 있습니다.

반응형