본문 바로가기
반응형

C++93

구조체의 크기 C, C++ 전체 링크 아래와 같은 구조체 st1이 있다. #include typedef struct st1 { char a; short b; int c; char d; long long e; char* f; int* g; }; int main(void) { printf("char a size : %d\n", sizeof(char)); printf("short b size : %d\n", sizeof(short)); printf("int c size : %d\n", sizeof(int)); printf("char d size : %d\n", sizeof(char)); printf("long long e size : %d\n", sizeof(long long)); printf("char* f size : .. 2021. 6. 19.
C++ - 컨테이너와 반복자 (Container and Iterator) C, C++ 전체 링크 C++의 표준 템플릿 라이브러리 (STL, Standard Template Library)는 아래와 같이 구성된다. - 컨테이너(Container) : 객체를 저장하는 객체, 컬렉션, 자료구조. - 반복자(Iterator) : 컨테이너의 원소에 접근하여 다음 원소를 가리킨다. - 알고리즘 : 연산, 검색, 삭제, 정렬 제공. - 함수 객체(Function Object) : operator의 오버로딩. - 어댑터(Adapter) : 인터페이스를 변경하여 새로운 인터페이스로 변경. - 할당기(Allocator) : 메모리 할당에 대한 클래스 객체 컨테이너는 같은 타입을 저장하고 관리할 수 있는 클래스이다. 각 컨테이너는 자신만의 삽입순서를 가진다. Sequence Container -.. 2021. 6. 11.
C++ - 인라인(inline) 함수 C, C++ 전체 링크 매크로 함수는 실행속도가 빠르지만 간단한 함수도 정의하기가 힘들다. c++에서의 inline 함수는 일반 함수처럼 만들고 매크로 함수처럼 대체하는 기능이 있다. 두 변수 중 큰 값을 return하는 함수는 보통 아래처럼 만든다. int max(int a, int b) { return (a > b) ? a : b; } 위 함수를 매크로 함수로 만들면 아래와 같다. #define MAX_VALUE(A, B) (((A) > (B)) ? (A) : (B)) 아주 간단한 함수지만, 괄호가 많아지기 때문에 벌써부터 복잡해진다. 하지만 inline 키워드를 이용하면 훨씬 간단하다. inline int max_value(int a, int b) { return (a > b) ? a : b; } .. 2021. 5. 19.
단락 평가 Short Circuit C, C++ 전체 링크 논리 연산에서 뒤의 수식과 상관없이 이미 판정 결과가 나온다면, 뒤의 수식은 수행될 필요가 없다. AND 연산 A && B && C 에서 A가 false라면, B와 C는 true/false 여부에 상관없이 false다. OR 연산 A || B || C 에서 A가 true라면, B와 C는 true/false 여부에 상관없이 true다. C/C++에서 short circuit이 작동하는지 확인해보자. 먼저 아래의 코드를 실행해서 printf의 return 값을 알아보자. #include int main(void) { int pf1 = printf("hello\n"); int pf2 = printf("world!!\n"); printf("pf1 : %d, pf2 : %d\n", pf1,.. 2021. 5. 11.
C++ split 함수 구현 C, C++ 전체 링크 아래의 string을 ","로 구분하여 a / b / c / d / ef / ghi / jkl / mn / opqr 이 되도록 해보자. a,b,c,d,ef,ghi,jkl,mn,opqr 즉, str을 ","로 split하여 vector의 결과를 얻어보자. C언어에서 문자열의 끝은 0으로 구분한다. 따라서 split의 종료는 0이 될 때 종료할 수 있다. 그러나 linux로 file 작업을 하다보면 문자열의 끝이 0이 아닌 경우가 종종 있다. 뭔가 작업이 잘 안된다면 char type을 %d로 출력하면 정체를 확인할 수 있다. 여러 상황이 있겠지만, 경험상 ASCII 코드의 10번인 개행문자 '\n'와 13번인 Line Feed가 있다. 이러한 값들이 대부분 실제 vi로 보이지 않고,.. 2021. 5. 8.
typedef 선언 C, C++ 전체 링크 typedef를 이용하면 기존에 존재하는 자료형의 이름을 재정의 할 수 있다. 예를 들어 unsigned long long int type을 선언한다고 가정하자. 그러면 새로운 변수를 쓸 때마다 매번 "unsigned long long int"를 선언해야 한다. 하지만 typedef로 unsigned long long int를 ull로 재정의하면 한결 편해진다. #include typedef unsigned long long int ull; int main(void) { ull a = 1ull 2021. 5. 2.
C++ 포인터와 참조자 (pointer vs reference) C, C++ 전체 링크 포인터와 참조자 모두 call by reference로 함수 내에서 변수의 값을 변경할 수 있다. 포인터는 선언 시에 주소를 할당할 필요가 없고, 나중에 다른 주소를 할당할 수 있지만, 참조자는 반드시 처음에 변수를 할당하고, 나중에 변경할수도 없다. 포인터가 함수로 넘어가면 새로운 포인터에 포인터의 주소를 복사하기 때문에 메모리가 필요하지만, 참조자는 이름만 빌리기 때문에 메모리가 필요없다. 포인터는 변수를 바꾸기 위해 * 연산자를 이용하지만, 참조자는 이름만 바뀌었으므로 그대로 변경하면 된다. 아래의 내용을 실행해서 포인터와 참조자의 차이를 비교해보자. #include void checkPointer(int* ptr) { printf("-------checkPointer----.. 2021. 5. 1.
제곱근 Square root : 바빌로니아 법 (The Babylonian Method) C, C++ 전체 링크 바빌로니아 법은 임의의 수의 제곱근에 빠르게 수렴하는 수열을 만들어 근삿값을 구하는 방법이다. 이 수열을 계속해서 반복하면 x가 √a가 된다. 먼저 PRECISION_COUNT를 5로 정의하고, 바빌로니아 법을 5번 반복해보자. printf에 .[Number]f로 옵션을 주면 Number의 자릿수만큼 소수점을 출력할 수 있다. #include #define PRECISION_COUNT (5) double sqrt(int num) { double x = num / 2.0; for (int i = 0; i < PRECISION_COUNT; i++) { x = (x + (num / x)) / 2; /* xn+1 = (xn + (num / xn)) / 2 */ } return x; } i.. 2021. 4. 9.
C++ ofstream을 이용한 FILE 출력 C, C++ 전체 링크 C++에서 파일을 출력하는 방법 중 하나는 ofstream이다. ofstream은 fstream header와 namespace std를 선언하면 쓸 수 있다. 먼저 ofstream type 변수를 하나 선언한다. open 메서드를 이용하여 출력할 파일명을 넣는다. 파일명이 없다면 새로 파일을 만들지만, 솔루션 탐색기에는 따로 추가해야한다. 출력할 파일이 정해졌으면 " 2021. 3. 18.
반응형