[C++] vector 사용법 및 구조

kimyb·2022년 10월 22일

1. vector의 특징

  • stack에 vector 오브젝트가 생성됨.
  • heap에 연속적인 메모리공간을 가리킴. (vector 내부 원소들)
  • dynamic size array
  • sequence container
  • delete를 하지 않아도 스텍에서 vector가 없어질때, 자동적으로 heap 위에 있는 메모리가 return 됨.

2. vector 생성


std::vector<int> v1{0,1,2,3,4,5}; 	// 6칸의 크기에 0~5까지의 값으로 초기화

vector<int> v1(100);									// v1를 0으로 100개 채움. (stack)
cout << "v1.size() : " << v1.size() << endl;			// 100
cout << "v1.capacity() : " << v1.capacity() << endl;	// 100

vector<int> v2(200,1);									// v2를 1로 200개 초기화. (stack)
cout << "v2.size() : " << v2.size() << endl;			// 200
cout << "v2.capacity() : " << v2.capacity() << endl;	// 200


vector<int>* v3 = new vector<int>[10];					// new를 통한 생성도 가능. (heap)
cout << "v3->size() : " << v3->size() << endl;			// 0
cout << "v3->capacity() : " << v3->capacity() << endl;	// 0
delete v3; 												// 해제 필요.

stack에 선언된 vetor는 자동으로 메모리가 관리되기 때문에, 굳이 new/delete를 사용하지 않아도 된다.

3. vector 원소 추가.

cout << v.size() << endl;		// 6 출력 ( v의 원소 개수 ), return type은 size_t 
										
v.emplace_back(6);				// v의 마지막에 6을 추가 
cout << v.size() << endl;		// 7 출력
v.pop_back(); 					// v의 마지막 원소 제거 size는 줄지만, capacity는 그대로

push_backemplace_back은 둘 다 C++의 std::vector 컨테이너에서 원소를 추가하는 함수이지만, 중요한 차이가 있다.

  1. push_back 함수:

    • push_back 함수는 새로운 원소의 복사본을 벡터에 추가.
    • 추가하려는 원소의 복사 생성자가 호출되고 복사본이 벡터에 저장된다.
    #include <vector>
    
    int main() {
        std::vector<int> myV;
        myV.push_back(13); // 13을 복사하여 추가
        return 0;
    }
  2. emplace_back 함수:

    • emplace_back 함수는 새로운 원소를 벡터의 끝에 추가하지만, 원소를 직접 생성하고 벡터 내에서 즉시 추가.
    • 원소를 생성할 때 복사본을 만들지 않으므로 복사 생성자가 호출되지 않음.
    • emplace_back 함수는 가볍고 효율적인 방법으로 원소를 추가할 수 있다.
    #include <vector>
    
    struct MyS {
        int x;
        double y;
    };
    
    int main() {
        std::vector<MyS> MyS_1;
        MyS_1.emplace_back(12, 1.34); // 원소를 직접 생성하여 추가
        return 0;
    }
    • emplace_back은 복잡한 객체를 컨테이너에 추가할 때 유용.
    • push_back이미 생성된 원소나 간단한 데이터를 추가할 때 사용할 수 있다.
profile
공부했던것을 정리.

0개의 댓글