-
멀티스레드 환경에서 vector 사용, pairC++ 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