vector란

vector

  • std::vector는 표준 라이브러리에서 제공하는 동적 배열 컨테이너
  • 배열과 유사한 인터페이스를 제공하지만 크기를 동적으로 조정할 수 있음
  1. 동적 크기 조정

    1. 배열괄 달리 원소 개수를 동적으로 조정할 수 있다.
    2. 원소를 추가하거나 제거할 때 자동으로 크기가 조정된다
  2. 순차적 저장

    1. 원소들을 메모상에 연속적으로 저장하므로 인덱스를 빠르게 접근 할 수 있다.
  3. 원소 추가 및 제거:

    • push_back(value): 배열의 끝에 원소를 추가합니다.
    • pop_back(): 배열의 끝에 있는 원소를 제거합니다.
    • insert(position, value): 특정 위치에 원소를 삽입합니다.
    • erase(position): 특정 위치의 원소를 제거합니다.
  4. 크기 및 용량 관련 함수:

    • size(): 현재 원소 개수를 반환합니다.
    • capacity(): 현재 할당된 메모리 공간 크기를 반환합니다.
    • resize(new_size): 원소 개수를 변경하고, 더 많은 원소를 추가하거나 제거할 수 있습니다.
  5. 인덱스 접근 및 순회:

    • at(index): 지정한 인덱스에 해당하는 원소에 접근하며, 범위를 벗어나면 예외가 발생합니다.
    • operator[](index): 지정한 인덱스에 해당하는 원소에 접근하며, 범위를 벗어나도 예외가 발생하지 않습니다.
    • begin()end(): 반복자(iterator)를 반환하여 벡터를 순회할 수 있습니다.
  6. 메모리 관리:

    • shrink_to_fit(): 현재 원소 개수에 맞게 메모리 공간 크기를 조정합니다.
  7. 복사와 할당:

    • std::vector의 복사 생성자와 대입 연산자를 사용하여 벡터를 복사하거나 대입할 수 있습니다.

      
      Copy code
      #include <iostream>
      #include <vector>
      
      int main() {
        std::vector<int> numbers;  // 빈 벡터 생성
      
        numbers.push_back(10);
        numbers.push_back(20);
        numbers.push_back(30);
      
        for (const int& num : numbers) {
            std::cout << num << " ";
        }
      
        return 0;
      }

      백터가 항상 효율적이냐?

      백터(std::vector 또는 ArrayList)를 사용하는 것이 항상 효율적인 것은 아닙니다. 효율성은 사용되는 상황과 요구 사항에 따라 달라집니다. 아래의 몇 가지 상황을 고려해보겠습니다.

    • 백터 사용이 효율적인 상황:*

    1. 동적 크기 조정이 필요한 경우: 만약 원소의 개수가 동적으로 변하거나, 크기를 미리 예측하기 어려운 경우에는 백터가 유용합니다. 크기가 자주 변경되는 컨테이너에서 편리하게 사용할 수 있습니다.
    2. 순차적인 데이터 접근: 원소들을 순차적으로 접근하는 작업에서는 백터의 연속적인 메모리 배치가 성능 향상에 도움이 될 수 있습니다.

    다른 자료 구조 또는 상황의 효율성:

    1. 고정 크기 배열: 만약 원소의 개수가 고정되어 있고 크기 변경이 필요하지 않다면, 고정 크기 배열을 고려해 볼 수 있습니다. 크기 변경의 필요성이 없는 경우 메모리 사용 면에서 더 효율적일 수 있습니다.

    2. 특정 접근 패턴: 빈번한 중간 원소의 삽입 및 삭제가 필요한 경우라면 연결 리스트나 트리와 같은 다른 자료 구조를 고려할 수 있습니다. 이러한 자료 구조는 삽입 및 삭제 작업에 효율적일 수 있습니다.

    3. 메모리 사용 고려: 백터는 메모리 할당 및 해제 작업을 내부적으로 수행하므로, 메모리 사용에 대한 고려가 필요합니다. 큰 데이터셋의 경우에는 메모리 효율성을 고려하여 다른 자료 구조를 선택하기도 합니다.

    4. 데이터 정렬 및 탐색: 정렬된 데이터를 다루거나 특정 원소의 탐색이 빈번한 경우에는 트리 기반의 자료 구조가 효율적일 수 있습니다.

      즉, 백터는 동적 크기 조정 및 순차적인 데이터 접근에 유용한 자료 구조입니다. 하지만 각 상황마다 어떤 자료 구조가 가장 효율적인지 판단하기 위해서는 사용하고자 하는 작업의 특성을 고려하고 비교해보는 것이 중요합니다.