프로그래밍 언어/C++

    [C++] cin.ignore와 버퍼에 대한 이해

    cincin은 character input의 약자로, 버퍼의 값을 읽어온다. 만약 버퍼에 읽어올 값이 없으면 표준 입력 스트림으로부터 입력을 받아와 버퍼에 저장하고나서 버퍼의 값을 읽어온다.입력을 받는다는 것이 아닌 버퍼를 먼저 읽으려고 한다는 관점이 중요하다. (버퍼는 자료구조 queue와 유사하다. 선입선출로 작동한다.) cin >>은 공백 (스페이스, 탭, 줄바꿈) 문자를 기준으로 끊어서 읽어오고, 공백문자는 무시한다#include using namespace std;int main() { char name[100]; cout > name; cout 0. 버퍼에 다음과 같이 저장된다. [ j ] [ o ] [ h ] [ n ] [ ' ' ] [ n ] [ a ] [ n ] [ a ]..

    [C++] std::map을 value 기준으로 정렬하기

    std::map 정렬map의 자료구조는 기본적으로 key 값 기준 오름차순 기반 정렬을 하고 있다template , // map::key_compare class Alloc = allocator > // map::allocator_type > class map; 만약 우리가 key 값 기준 내림차순으로 변경하기 위해선 3번째 인자에 greater()를 넣어주면 된다// 키, 데이터, comparemap> m;value 값 기반 정렬하기map에는 정렬 함수가 따로 없어서, vector를 활용해야한다. 구체적으로, map은 tree형태로 되어져있고, tree 형태를 만드는 과정에서 key을 기준으로 정렬을 한다. 완성된 tree를 ..

    [C++] set, map 정렬 기준 바꾸는 방법

    C++ STL에서 제공하는 set, map, multiset, multimap 등의 컨테이너는 자동으로 데이터를 정렬된 상태로 유지시켜 준다. 그래서 이러한 컨테이너에 데이터를 넣고 그대로 출력하기만 하면 오름차순으로 정렬된 데이터를 얻을 수 있지만 가끔은 내림차순 정렬이 필요하거나 내가 원하는 방식대로 정렬되어야 하는 경우도 생긴다. set의 템플릿 (template)을 살펴보면 다음과 같이 되어 있다template , class _Alloc = allocator> _Kty 부분은 흔히 사용하는 키 타입을 설정하는 부분이다. 우리가 봐야 할 부분은 _Pr이다 기본 값으로 less가 설정된 모습을 볼 수 있는데 이 less는 아래와 같이 정의되어 있다template struct less { _CXX..

    [C++] 문자열 뒤집는 방법

    1. reverse() 함수 #include #include#includeusing namespace std; int main() { string str = "abcd"; reverse(str.begin(), str.end()); cout1.5 reverse iterator 사용string str, rstr;cin >> str;rstr.assign(str.rbegin(), str.rend());2. strrev() 함수 #include#includeusing namespace std; int main() { char str[] ="abcd"; strrev(str); cout3. for문 사용#include#includeusing namespace std; int main(..

    [C++] string to int, float, double 자료형 / stoi, stol, stoll

    atoi 계열 함수 및 sscanf()기존 c에서는 str 형식 사용시 다른 자료형 (int, double, float)에 맞도록 읽어오려면, atoi() 및 sscanf()로 형식을 지정해주었으며, 이를 활용한 간단한 예시는 아래와 같다const char *str = "12345";// atoi 계열 함수int x = atoi(str);// sscanf 사용int y;sscanf(str, "%d", &y);c++에서는 이와 비슷한 방법으로 stoi() 및 타입 캐스팅 그리고, 반복자를 활용하여, 데이터 변환을 할 수 있는데, 그 중에서 stoi() 계열 함수가 있다.c++에서의 stoi()c++에서 stoi() 함수는 문자열을 정수 값으로 변환하는데, stoi()는 이름에서 알 수 있듯이 string ..

    [C++] C++ 17 표준 라이브러리의 알고리즘 병렬화

    알고리즘의 병렬화C++ 17은 표준 라이브러리의 여러 알고리즘에 '병령 실행'을 지원하는 중복적재 버전을 추가하며, 병렬 실행을 지원하는 새 알고리즘도 여럿 추가한다. 예를 들어 기존 알고리즘인 std::transform에는 다음과 같은 중복 적재 버전들이 추가되었다.FwdIt2 transform( ExePolicy&& policy, FwdItIt1 first1, FwdItIt1 last1, FwdIt2 d_first, UnFunc func);FwdIt3 transform( ExePolicy&& policy, FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt3 d_first, BiFunc func ..

    [C++] 문자열 뒤집는 방법 string

    출처 X 개인이 작성한 코드string은 vector형이므로 vector형 테스트 x1. algorithm 헤더 파일 내 reverse 함수 사용두 개의 오버로딩 함수가 존재한다 아래껀 일단 생략한다, && 임시값인 _Enable_if_execution_policy 플래그인데 용도를 잘 모르겠다. 이번에 쓰여질 함수 원형은 아래와 같다, First는 시작 지점의 포인터와 Last는 마지막 지점 // string 사용string s = "algorithm";cout  // 배열 사용, 특이사항: const char*로 문자열 초기화 시 const이기 때문에 reverse 함수가 작동되지 않는다.끝 인덱스를 구하기 위해선 단순하게 총 길이에서 1만큼 빼주면 된다.char s[] = "algorithm";co..

    [C] main()과 return 사용 이유, 설명

    C 프로그램 동작 방식C 프로그램은 main() 이라는 함수가 운영체제(OS) 에서 호출되면서 시작되고, 그 main 함수가 호출되면 main 이름으로 정의된 block으로 진입하여, bloc 내의 명령문들을 순서대로 실행하게 된다. User는 사용자다. Application을 c 프로그램이라고 생각해보자.프로그램은 '함수의 집합체'이니 예를 들어서 프로그램도 함수라고 가정한다면, 그 함수를 호출하는 주체는 OS이며, 결국 거대한 함수이다. O/S가 프로그램을 실행한다는 것은 특정 실행 파일에 존재하는 'main' 함수를 호출하는 것이다. [그림 1]에서 볼 수 있는 call main() 위의 [그림1]의 Application 부분의 오른쪽 화살표를 보면, C 언어 코드가 적혀있다. 지금 봐야하는 lin..

    [C++] 원이 겹치는지에 대한 개인 코드

    struct Circle{ float x, y, z; float mp = 0; // middle-point float l = 0;public: Circle() = default; Circle(float x, float y, float z = 0) :x(x), y(y), z(z) { } bool operator==(Circle& ref) { return this->x == ref.x && this->y == ref.y && this->z == ref.z; }};int main(){ // 주어진 원 vector v({ {-3, 0}, {0, 5}, {2, 3} }); int size = v.size(); vector> check(size, vector(size)); int ans = 0; for (int i..

    [C++] 2차원 vector 크기 동적으로 재설정

    아래와 같이 이미 초기화가 된 벡터에 resize 함수를 사용하면 열이 제대로 반영이 안되는걸 볼 수가 있는데 2번째 인자인 vector(5)는 임시 객체이기 때문에 본 객체에 변경이 반영되지 않는다.int main(){ vector> a(7, vector(6)); a.resize(5, vector(5)); a[0].resize(5);} 해결 할 수 있는 방법은 새로운 임시 객체를 만들어 재할당 하는것이다vector> a(7, vector(6));a = vector>(7, vector(5)); 코딩테스트 때 유용하게 써먹자