프로그래밍 언어/C++

    [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)); 코딩테스트 때 유용하게 써먹자

    [C++] vector (벡터) 복사하기

    반복자#include #include using namespace std;void printVector(const vector v) { cout vect1{1, 2, 3, 4}; vector vect2; for (int i = 0; i  출력Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2The first element of new vector is :1할당 연산자 =(Assignment Operator =)#include #include using namespace std;void printVector(const vector v) { ..

    [C/C++] 부동소수점의 비교연산 안되는 이유 및 오차범위 해결하기

    int i = 0;double d = 0.f;while (i++  사실 C++에선 다 자르고 출력하기 때문에 파악하기가 쉽지 않다  아래와 같이 작성해주면 쉽게 파악 할 수가 있다 따라서if (d == 1.0) 를 해주면 false가 나오는 이유다int main(){ int i = 0; double d = 0.f; while (i++  이녀석만큼 빼주면 된다int main(){ int i = 0; double d = 0.f; while (i++

    [C++] 구조체 바이트 패딩 규칙 코드 (structure byte padding or align rule)

    1. Unless overridden with __declspec(align(#)), the alignment of a scalar structure member is the minimum of its size and the current packing."__declspec(align(#))을 오버라이드 하지 않으면, 스칼라 구조체(long, bool과 같은 일반 변수로만 이루어진 구조체)의 멤버는 변수의 사이즈와 현재 지정된 byte padding align을 따른다." bool과 long으로만 이루어진 각 구조체의 사이즈는 1 byte, 4 byte와 같이 각각의 멤버 사이즈대로 align 되었다.struct Size_1_Align{ bool b;};struct Size_4_Alig..

    C++ 23 추가된 주요 기능들

    1. if consteval - if constexpr의 consteval 버전이 생긴다. 2. Deducing this - 이제 클래스에서 똑같은 함수를 non-const, const 버전으로 두 가지를 만드느라 생기는 중복코드가 대폭 간결해진다. 3. auto(x), auto{x} - 함수 파라미터에서 rvalue (정확히는 prvalue)로 카피해 전달해주는 기능이다. 예제) 벡터에서 첫 원소와 똑같은 원소를 다 지우고 싶을 때 auto elem = v.front(); std::erase(v.begin(), v.end(), elem); 이 때 auto elem = v.front(); 에서 무조건 복사가 생긴다. C++ 23부터는 std::erase(v.begin(), v.end(), auto(v.f..

    [C] 키 입력받는 함수 GetAsyncKeyState, GetKeyState

    GetAsyncKeyState SHORT GetAsyncKeyState(int vKey) 반환값은 SHORT형이고, 첫번째 인수로는 가상 키코드가 오며, 우리가 만약 VK_UP을 넘겨주면, 방향키 중 위를 가르키는 키가 눌려있나 눌려있지 않나 확인할 수 있다. (키가 눌려진 상태에서는 최상위 비트(0x8000)이 1이 되며, 처음 입력되었을 때는 0x8001 비트가 1이 된다.) 가상 키코드 모음 반환값은 아래와같이 4가지로 나뉜다. 이전에 누른 적이 없고 호출 시점에서 눌린 상태, 즉 키가 눌려진 시점에서 0x8000을 반환한다. 만약 이전에도 누른 적이 있고 호출 시점에서도 눌렸으면 0x8001을 반환한다. 이전에 키를 눌렀으면 0x0001을 반환하고, 눌리지 않았다면 0x0000을 반환한다. Get..

    [C++] inline (인라인) 함수란

    inline 함수는 C++의 실행 속도 개선을 위해 등장 했다. C++에서는 기본적으로 클래스 선언을 통한 맴버함수가 많이 이용되는데, 이러한 경우 보통 간단한 기능을 하는 함수들이 많이 만들어지게 된다. 예) 생성자, getter(), setter(), print() 등 과같은 간단한 함수. 함수들이 간결하여 실행속도에 영향을 끼지지 않을 것 같지만 함수 호출 과정에서 프로그램 속도가 떨어지게 된다. 함수의 호출은 다음과 같이 진행된다. #include int fnc_1(int a, int b){ //매개변수 스택에 저장 return a + b; //리턴 값을 임시 저장소에 저장. } int main(void){ int num; num = fnc_1(5,1); //함수 호출 시점, 이곳의 주소값을 스택..

    [C++] 입출력 개요

    * 표준 입출력 스트림의 계층도 - iostream 계층도 cout은 basic_ostream에 속해 있으며, cin은 basic_istream에 속해 있다. - 표준 출력 객체 cout cout은 Console Output의 약어로 콘솔 출력을 의미한다. cout은 클래스가 아닌 객체다. cerr과 clog는 오류 출력과 디버깅 출력을 위한 것인데 기본적으로 모니터에 출력한다. - 기본 출력과 endl 기본적인 출력 방법이다. cout은