ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C/C++] STL Vector 사용법
    프로그래밍/C,C++ 2020. 5. 8. 00:38

    Vector

    배열과 거의 동일한 기능을 수행하는 자료구조

    배열과 마찬가지로 원소가 메모리에 연속하게 저장되어 있기 때문에 O(1) 시간으로 원소에 접근 가능

    배열과 다르게 크기를 자유자재로 늘이거나 줄일 수 있다는 장점이 있음 => 가변 배열

    그래프의 인접리스트를 구현할 때 많이 사용

     

    vector<int> a;
    비어있는 벡터 a 생성
    
    vector<int> a(10);
    0으로 초기화 된 크기가 10인 벡터 a 생성
    
    vector<int> a(10,1);
    1로 초기화 된 크기가 10인 벡터 a 생성
    
    vector<vector<int> > a;
    비어있는 2차원 벡터 a 생성
    
    vector<vector<int> > a(10, vector<int>(10));
    0으로 초기화 된 10x10 2차원 벡터 a 생성
    
    vector<vector<int> > a(10, vector<int>(10,1));
    1로 초기화 된 10x10 2차원 벡터 a 생성 
    
    vector<int> a[10]
    0으로 초기화 된 벡터 배열 a 생성 // a[0], a[1], a[2] ... a[9]
    
    vector<pair<int, int> > g[3]
    0으로 초기화 된 페어형 벡터 배열 g 생성 
    
    // g[0].push_back({3,5}); == g[0].push_back(make_pair(3,5));
    
    // g[0][0].first == 3
    
    // g[0][0].second == 5
    
    a[0]=make_pair(3,1); 
    pair형 벡터의 원소를 추가하는 다른 방법
    
    a.front();
    첫번째 원소를 참조
    
    a.back();
    마지막 원소를 참조
    
    a.clear();
    모든 원소를 제거(메모리는 남아있음)
    
    a.push_back(5);
    마지막 원소 뒤에 5를 삽입
    
    a.pop_back();
    마지막 원소를 제거
    
    a.begin();
    첫번째 원소를 가리킴(pointer/iterator)
    
    a.end();
    마지막 원소를 가리킴(pointer/iterator)
    
    a.erase(a.begin());
    첫번째 원소 제거
    
    a.erase(a.end());
    마지막 원소 제거
    
    a.size();
    벡터의 크기(원소의 개수)를 리턴
    
    a.capacity();
    할당된 공간의 크기를 리턴
    
    a.empty();
    벡터가 비어있으면(a.size==0) true를 리턴
    
    a.erase(unique(a.begin(),a.end()),a.end()); 
    중복 제거 (정렬 후 사용 필수!)
    
    *min_element(a.begin(), a.end());
    벡터에서 최소값을 리턴
    
    *max_element(a.begin(), a.end());
    벡터에서 최대값을 리턴

     

    Vector의 반복문

    vector<int> v = {1, 2, 3, 4, 5, 6};
    
    // 1. ranged-based for loop (C++11~)
    for(int e : v) {
    	cout<<e<<" "; // 1 2 3 4 5 6
    }
    
    // 2. legacy for loop
    for(int i = 0; i < v.size(); i++) {
    	cout<<v[i]<< " ";
    }
    
    // 3. !!!WRONG!!!
    for(int i = 0; i < v.size()-1; i++) {
    	cout<<v[i]<<" ";  
    }
    
    // 출처 : https://www.youtube.com/watch?v=mBeyFsHqzHg&t=893s

     

    ※ 기본적으로 vector의 size() 메소드는 unsigned int를 반환하기 때문에 3번의 경우 v가 빈 벡터일 때, v.size()-1이 unsigned int 0에서 int 1을 빼는 식이 되고, unsigned int와 int를 연산하면 unsigned int로 자동 형변환이 되기 때문에 결과 값이 -1이 아니라 4294967295가 됨

     

    '프로그래밍 > C,C++' 카테고리의 다른 글

    [C/C++] STL Stack, Queue 사용법  (0) 2020.09.22
    [C/C++] map 자료구조를 이용한 문자열 문제 해결  (0) 2020.09.02
    [C/C++] String 함수 정리  (0) 2020.05.07
    if 와 else if의 차이점  (0) 2020.02.29
    [C/C++] scanf vs fgets  (0) 2020.02.28

    댓글

Designed by Tistory.