• 멀티스레드 환경에서 vector 사용, pair
    C++ 2021. 7. 6. 03:22
    반응형
    vector

    동적 배열 컨테이너

    배열처럼 메모리 연속적으로 할당함

    #include <vector>
    
    std::vector<int> v1; // 빈 벡터 생성
    std::vector<int> v2(10); // 원소 10개 가진 벡터 생성 (0으로 초기화)
    std::vector<int> v3(10, -1); // 원소 10개 모두 -1로 초기화한 벡터 생성
    std::vector<int> v4 = {1, 2, 3}; // 원소 직접 초기화

     

    ** 멀티스레드 환경에서 vector 사용하는 경우 **

    잘못된 인덱스 접근으로 세그 폴트 발생하는 걸 막기 위해 반드시!

    resize(n) 또는 resize(n, 초기 값)으로 사이즈 정해놓고 사용할 것!

     

    그리고 push_back() 사용은 되도록 지양하자.

    계속 뒤에 붙이다가 기존 용량 초과하면 기존의 두 배 만큼 늘려서 재할당 하게 됨.

    (기존 데이터 모두 복사하고 해제하고... 반복)

     

    reserve(n)은 n만큼 용량을 미리 확보해주지만 진짜 용량 확보만 하는 거라서

    초기화 안 시키고 접근하면 세그 폴트 난다.

    std::vector<std::vector<int>> m_Vec;
    
    // ...
    
    std::unique_lock<std::mutex> calLock(calMutex);
    m_Vec.resize(m_Count, std::vector<int>(m_Count, 0));
    
    for (int idx=0; idx<m_Vec.size(); idx++) {
        // 벡터 데이터 접근 및 수정
    }

     

    pair

    한 쌍의 데이터를 하나로 묶어서 처리할 때 사용

    first, second로 접근 가능

    utility, algorithm, vector 등의 헤더파일로 include 가능

    #include <iostream>
    #include <vector>
    
    int main() {
        std::pair<int, double> p = std::make_pair(94, 7.28);
        std::cout << p.first << ", " << p.second << '\n';
    
        std::vector<std::pair<int, double>> vp = {
            {1, 0.1},
            {2, 0.2},
            {3, 0.3}
        };
    
        vp.push_back(std::make_pair(4, 0.4));
    
        for (const auto &data : vp) {
            std::cout << data.first << ", " << data.second << '\n';
        }
    
        return 0;
    }
    94, 7.28
    1, 0.1
    2, 0.2
    3, 0.3
    4, 0.4

     

    반응형

    'C++' 카테고리의 다른 글

    map  (0) 2021.07.11
    입출력 조작자, 포맷 함수  (0) 2021.07.11
    stoi() - string to int  (0) 2021.07.06
    cin.ignore() - cin, getline 동시에 사용할 때  (0) 2021.07.06
    stack  (0) 2021.06.01

    댓글

ABOUT ME

공부한 것을 기록하기 위해 블로그를 개설했습니다.

VISIT

/