본문 바로가기

전체 글38

[C++ STL] Vector에서 assign과 resize 차이 Vector 컨테이너에서 assign 함수와 resize 함수의 차이를 알아보겠습니다.assign 함수란?벡터의 기존 내용을 삭제하고 새로운 크기와 원소값으로 초기화하는 함수크기와 초기화 값을 인자로 받음혹은 iter 시작값, 끝값을 입력받음 (set 자료구조의 값을 vector로 옮겨오는 식으로 응용가능)예)v.assign(n, 5); // n의 크기만큼 5로 초기화// iterator 값이 들어올 경우set s;// ~// s에 값 입력// ~v.assign(s.begin(),s.end());(set 자료구조의 값을 vector로 옮겨오는 식으로 응용) resize 함수란?벡터의 기존 내용을 유지한 채로 크기만 변경하는 함수기존 크기보다 작아질 경우, 크기를 초과하는 원소 값은 제거됨기존 크기보다 커.. 2025. 1. 14.
[C++ STL] Vector 초기화 시 비용 절감 방법 vector 클래스 초기화 시 비용(시간, 메모리) 절감을 위한 방법을 알아보겠습니다.vector의 초기화?vector v(크기, 값)의 형태이다.크기만 지정할 경우 모든 원소를 0으로 초기화한다.// 크기만 지정하면 모든 원소는 기본값인 0으로 초기화된다.vector v(5);vector v2(5,0); // 크기 5, 모든 원소를 0으로 초기화if (v == v2) cout 위 코드에서 v와 v2가 같다는 것을 알 수 있습니다. 초기화 시 비용 절감 방법?선언만 할 경우 size, capacity 모두 0이다.벡터의 capacity보다 원소의 수가 많아질 경우, 메모리를 재할당하는 작업을 거친다.선언 후 push_back으로 원소를 삽입하면 메모리를 재할당하는 작업이 자주 일어나므로 불필요한 비용 소.. 2025. 1. 1.
[C++] 주소에 의한 호출, 참조에 의한 호출 (Call by Address, Reference), 포인터로 객체 멤버 접근하기 1. C++에서 함수 호출 시 인자를 넘겨줄 수 있는 방법들을 알아보겠습니다.2. 포인터로 클래스의 멤버를 접근할 때 사용하는 연산자(->, .)의 차이를 정리해 보겠습니다.값에 의한 호출?call by value함수 호출 시 인자로 들어온 값을 복사해서 사용호출된 함수에서 연산을 거쳐도 인자에 영향을 주지 않음예)void swap(int x, int y) // 함수 구현부{ // 내용}swap(input1, input2); // 함수 호출 형태 주소에 의한 호출?call by address새롭게 변수를 생성하고 그곳에 값을 저장하는 것이 아니므로 자원을 절약할 수 있음. (메모리, 시간)함수 호출 시 주소 값을 인자로 받음호출할 함수의 매개변수를 포인터 형태로 구현호출된 함수에서 들어온 인자로 연산을 .. 2024. 12. 30.
[C++ STL] Pair 클래스 사용하기 Pair 클래스를 통해 두 종류의 데이터 타입을 묶어서 사용할 수 있다.구조체를 구현하지 않고도 간단하게 데이터 쌍을 만들 수 있다.pair 클래스?두 개의 데이터 타입을 하나로 묶어 저장하기 위해 사용pair p로 생성할 수 있다..first, .second로 해당 인자에 접근할 수 있다.vector와 같은 컨테이너에도 사용할 수 있다.예) pair p;vector> v;1. 필요한 라이브러리 #include // utility 헤더는 vector와 algorithm 헤더에도 포함됨.// 혹은#include // 혹은#include pair 클래스는 utility 헤더에 포함되어 있다.uitility 헤더는 vector 헤더나 algorithm 헤더에도 포함되기 때문에 다른 헤더를 사용해도 된다.2... 2024. 12. 29.
[C++] fixed와 precision로 소수 특정 자릿수까지 출력하기 C++에서 cout.precision() 함수와 fixed를 사용하여 출력할 자릿수를 지정할 수 있다.precision 함수란?정수 부분을 포함하여 n개의 숫자를 나타냄실수형의 경우 소숫점 이하 자리수 중 출력 범위를 넘어서는 부분에서 반올림한다. (4자리 출력 시 123.456 → 123.5)fixed와 같이 사용하면 소숫점 이하 출력 자릿수를 고정할 수 있다.fixed를 해제하려면 cout.unsetf(ios::fixed);를 사용.예)cout.precision(n);cout cout.unsetf(ios::fixed);1. 필요한 라이브러리 #include2. 실수형 변수 선언double db = 3.14159;3. 출력 및 자리수 설정// 기본 출력cout 4. 전체 소스 코드#include usi.. 2024. 12. 26.
[C++] getline() 특정 문자가 들어올 때까지 입력 받기 cin으로는 띄어쓰기와 개행문자(Enter, 줄 바꿈), 탭을 문자열에 저장할 수 없다.이런 문제는 cin 대신 getline을 사용하여 해결할 수 있다.getline란?getline을 사용하면 띄어쓰기와 개행문자 등을 문자열에 저장할 수 있다.입력되는 문자열 중 특정 문자가 입력될 때까지만 저장할 수도 있다.cin.getline(), getline() 등의 형태가 있다.예시)문자열 "happy birthday" 입력 시 'y'가 입력되기 전까지만 저장하면, 문자열에는 "happ" 까지만 저장된다.'d'가 입력되기 전까지 저장하면, 문자열에는 "happy birth"가 저장된다.1. 필요한 라이브러리#include #include // 보통 문자열 입력 시 많이 사용하므로 함께 사용string 대신 c.. 2024. 12. 12.
[C++] 시간복잡도 상수배 관련 최적화 요소들 시간복잡도for문 vs 범위 기반 for문(범위 기반 for문의 경우 배열 값을 참조)예) auto &i : array; cin >> i; - 유의미한 차이 없음, auto 형식 추론 키워드도 마찬가지메모리 사용량*vector는 C++ STL에서 지원하는 컨테이너다. [vector 입력 방식]// 코드 1// n은 사전에 입력됨vector v;for(int i = 0; i > tmp; v.push_back(tmp);}vs// 코드 2// n은 사전에 입력됨vector v(n);for(int i = 0; i > v[i];}코드1보다 코드2가 메모리 사용량 유의미하게 절감됨. 2024. 11. 20.
[C++] 범위 기반 for문 (feat. auto 선언 지정자) 범위 기반 for문이란?c++ 11 이후에 추가된 반복문이다.배열과 같은 컨테이너에 사용하며, 내부 요소를 반복하기 적합하다.배열, vector, list, set, map 등의 컨테이너에 사용할 수 있다. 형식)// element_declaration - 배열 요소와 같은 자료형이 아니면 형 변환 발생for (element_declaration : array) // array : 컨테이너, element_declaration : 배열 요소를 복사할 변수 statement; // statement : 내용array의 배열 요소를 복사하여 element_declaration에 넣는다고 보면 된다.element_declaration = array[i]; // i = 0, 1, 2, ...  사용 예제).. 2024. 11. 19.
[C++ STL] 이진 탐색과 순차 탐색의 시간복잡도 C++ STL의 algorithm 라이브러리에서 제공되는 코드를 사용합니다. 정렬 함수 : O(n log n)sort, stable_sortunique, erase : O(n) 이진 탐색 : O(log n)배열이 정렬된 상태에서 사용해야 함, 이진 탐색 트리(Binary search tree)binary_search, lower_bound, upper_bound 순차 탐색 : O(n)정렬되지 않아도 사용가능find 등..참고자료https://velog.io/@jimojjing/CSTL-sethttps://velog.io/@zeouscik/C-STL-%EC%A0%95%EB%A6%AC 2024. 11. 14.