C++

    [C++] STL list(리스트), 시퀀스 컨테이너

    리스트는 대충 위그림 처럼 생겼다. 각 요소들은 앞 뒤 노드를 가지고 있어서 이중 연결 리스트로 구현된다. 리스트는 랜덤 액세스가 불가능하다. 즉, 중간에 3번째에 자료에 접근하려면 처음부터 두번째, 세번째 이런식으로 거쳐가야한다. 반면에 장점은 어떠한 위치의 자료를 삭제, 삽입 하더라도 그 속도가 빠르다는 것이다. 배열 구조와는 달리 연결된 링크만 끊어내고 다시 이어붙이는 작업만 하면 되기 때문이다. #include #include using namespace std; int main() { list alpha_list; for(char c = 'a'; c

    [C++] *와 *& 연산자의 차이

    int *&x int *y 의 차이 x는 int 포인터에 대한 레퍼런스 타입 y는 int 포인터 타입 아래 func 함수 파라미터로 넘길 시 y는 복사본을 받을거고 x는 포인터에 대한 주소를 받게 된다. 이거는 y는 스코프 벗어 날 시 값 변화가 없지만 x는 변경된다 void func(int* p, int*& pr) { p++; pr++; } int main() { int a[2]; int* b = &a[0]; int* c = &a[0]; std::cout

    [C++] 프로토타입 패턴, Prototype Pattern

    원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다. (GoF의 디자인 패턴 169p) 위와 같이 같은 게임을 만든다고 생각해보자. 몬스터들은 영웅을 잡아먹기 위해 떼지어 다닌다. 이 몬스터 들은 스포너(spawner)를 통해 게임 레벨에 등장하는데, 몬스터 종류마다 스포너가 따로 있다. 게임에 나오는 몬스터마다 Ghost, Demon, Sorcerer 같은 클래스를 만들어보자. lass Monster { // 기타 등등.. }; class Ghost : public Monster {}; class Demon : public Monster {}; class Sorcerer : public Monster {}; 한 가지 스포너는 한 가지 몬..

    [C++] 관찰자 패턴, 옵저버 패턴, Observer Pattern

    객체 사이에 일 대 다의 의존 관계를 정의해두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 업에이트될 수 있게 만듭니다. (GoF의 디자인 패턴 382p) 모델-뷰-컨트롤러(MVC) 구조를 쓰는 프로그램이 발에 차일 정도로 MVC패턴은 많이 사용되는데, 그 기반에는 관찰자 패턴이 있다. 업적 달성 좀비 100마리 죽이기 다리에서 떨어지기 위와 같은 특정 기준을 달성하면 배지를 얻을 수 있는데, 배지 종류는 수백 개가 넘는다고 하자. 업정 종류가 광범위하고 달성할 수 있는 방법도 다양하다 보니 깔끔하게 구현하기가 어렵다. 조금만 방심해도 업적 시스템 코드가 암세포처럼 구석구석 퍼져 나갈 것이다. '다리에서 떨어지기'는 어떻게든 물리 엔진이랑 연결해야..

    C++과 C#의 차이 (데이터, 메모리)

    게임 개발에 사용하는 대표적인 엔진인 언리얼 엔진과 유니티 엔진은 각각 C++, C# 언어로 스크립트를 작성한다. 두 언어 모두 C언어에서 파생되었다는 것과 객체지향 프로그래밍 언어라는 공통점이 있지만, 꽤나 큰 차이가 있다. · 컴파일 결과 C++와 C#은 똑같이 컴파일이라는 과정을 거쳐 실행 파일을 생성하게 되지만, 프로그래머가 작성한 소스파일의 컴파일 결과로 생성되는 중간 파일의 형태가 다르다. C++로 작성한 코드는 어플리케이션의 실행 파일을 운영체제가 바로 실행하기 때문에, 컴퓨터가 이해할 수 있는 기계어에 가까운 어셈블리어라는 언어로 컴파일한다. 반대로 C#으로 작성한 어플리케이션은 운영체제 위의 .NET이라는 가상 머신 실행 환경에서 실행되기 때문에 .NET에 적합한 IL(Intermidia..

    C, C++, C# VB 데이터 타입 및 비교표

    C# 데이터 타입 및 C,C++,VB와 비교표 (tistory.com)

    [골4] 2580 - 스도쿠

    #include #define MAX 9 using namespace std; int map[MAX][MAX]; bool row[MAX][MAX]; bool col[MAX][MAX]; bool square[MAX][MAX]; void Input() { for (int i = 0; i > map[i][j]; auto val = map[i][j]; if (val != 0) { row[i][val] = col[j][val] = true; square[(i / 3) * 3 + (j / 3)][val] = true; } } } } void Print() { for (int i = 0; i < MAX; i++) { for (..

    void* 포인터 크기

    각 시스템마다 차이가 있다. 16비트 - 2 바이트 32비트 - 4 바이트 64비트 - 8 바이트 #include int main() { void *ptr; printf("The size of pointer value : %d", sizeof(ptr)); return 0; } 또는 #include using namespace std; int main() { cout

    [C++] string(문자열) 클래스 변환(atoi, c_str()) 등 정리

    1) 함수 설명 int atoi(const char* str) 헤더파일(C) : 헤더파일(CPP) : 설명 : C style의 문자열을 입력받아서 int (숫자) 타입으로 변환하여 리턴한다. std::string c_str() 반환형이 char * 이므로, 해당하는 string의 첫번재 문자의 주소값(포인터)를 반환한다. 예제 헤더파일 : , , 이름공간 : using namespace std; char* > string char * cStr = "Cstring"; string cppStr = cStr; cout

    [C/C++] atoi, atof, atol 함수 (char* to int), 문자열 > 값 타입

    1. atoi, atof, atol 함수 이름의 기원 atoi 함수를 살펴보면 a - to - i 이렇게 나눌 수 있다. a = char(ASCII), i = int 로 보면 char(ASCII) to integer 라는 이름으로 풀 수 있다. 즉. char 타입을 int 타입으로 변경한다. atoi = char to int = 문자열을 정수 타입으로 atof = char to double = 문자열을 실수 타입으로 atol = char to long int = 문자열을 long 정수 타입으로 중요한것은 여기서 char는 char[N], char* 로 표현이 되는 문자열을 말한다. C++ 에서는 string 클래스에 의해서 문자열을 string으로 표현할 수 있는데, C언어에서는 string 클래스가 존..