프로그래밍 39

[C++]String 클래스 멤버함수 간단 요약

더보기 string str1 = "MyName"; string str2 = "SuperRunner"; at(index) : 해당 위치 문자를 반환 operator[index] : 배열처럼 접근, 해당 문자를 반환, 1번 보다 빠르다. front() : 맨 앞 인자 반환 str1 .front() -> M을 반환 back() : 맨 뒤 인자 반환 str1 .back() -> M을 반환 size() : string 사이즈를 반환 str1.size() -> 6 length() : string 길이를 반환 5 번과 같다. capacity() : 할당된 메모리 크기를 반환. vector의 capacity와 마찬가지로 메모리할당을 여유롭게 한다. resize() 더보기 함수 원형 : void resize (size_..

프로그래밍/C++ 2022.01.05

[디자인패턴] 싱글톤

좋은 구조란? 뭔가를 고쳐야 할때 그럴줄 알았다는 듯이 코드가 준비되어있는걸 의미한다. 프로그래밍에서 가장 오래 걸리는 부분은 기존 코드를 이해하는 부분이다. 그렇기 때문에 작업에 들어가기 전에 알아야 할 지식의 양을 줄이는 것이 소프트웨어 구조의 핵심 목표이다. 커플링이 적은 코드일 수록 변경하였을때 나머지 게임코드에 미치는 영향이 적다. 소프트웨어 구조와 추상화가 게임의 성능을 저하시킨다는 비판도 있다. 코드르르 유연하게 만드는 많은 패턴이 가상함수, 인터페이스, 포인터, 메시지 같은 메커니즘에 의존하는데 다들 어느정도 런타임 비용을 요구한다. 성능은 가정에 기반하고 최적화기번ㄴ은 구체적인 제한을 선호한다. 적이 256개 이하일거라고 확신하면 ID를 1바이트로 압축할 수 있다. 한 자료형의 한 메서드..

[C++] 람다식

C++람다식 사용이유와 사용 방법 기본문법 [] () -> int {} [] : 캡쳐블록 ( 사용시 외부변수를 캡쳐해 람다의 몸통에서 사용가능하다.) () : 전달인자 -> 반환타입 {} : 함수 몸통 여기서 캡쳐블록 [] 와 전달인자. ()와 리턴 타입{}을 생략할 수 있다. 사용 이유 함수객체와 다르게 클래스 선언을 할 필요가 없다. 함수포인터와는 다르게 인라인화가 가능하다. 람다의 캡쳐부분 기본적으로 클래스의 멤버 변수를 람다의 바디 안에서 사용했다면, 이는 this->가 생략되어 있다. & : 모든 외부변수 참조 &, initialize : 모든 외부변수 참조 및 초기화 가능 = : 모든 외부변수 복사 ( =, intiailize : 모든 외부변수 복사 및 초기화 가능 [localVar] : 특정..

프로그래밍/C++ 2021.12.22

[c언어] 구조체 선언 과 초기화

배열과 구조체 배열 : 같은 자료형의 데이터를 일렬로 모아둔 자료구조 형태 구조체 : 다른 자료형일 지라도 논리적으로 연결되는 데이터들을 모아둔 자료구조 형태 구조체의 선언 tagname 이라는 구조체가 만들어 졌다. (구조체의 형태만이 만들어 졌다. 메모리 공간을 차지 하지 않는다.) tagName 구조체형을 갖는 변수 ABC가 선언되었다. 이떄 구조체기억 장소를 할당하게 된다. 구조체를 선언할 때 반드시 struct 기워드를 붙여준다. 3. 위와 같이 구조체 를 정의함과 동시에 변수를 선언할 수 도있다. 이떄 만들어진 ABC는 전역 변수가 된다.

[c++] 구조체, 구조체 배열, 구조체 포인터, 패딩바이트, typedef

구조체란 지금까지 썼던 자료형을 일반 자료형이라고 한다. 구조체는 사용자 정의 자료형에 속한다. 일반적인 생김새는 다음과 같다. 구조체 : 임의의 자료형 요소를 조합하여 다시만든 자료구조 이다. 구조체 이름앞의 xyz를 구조체 태그 라고 한다. 안에 선언된 걸 구조체 멤버라고 한다. struct 구조체 명 { 자료형들 } 이런식으로 안의 구조체 멤버들을 선언을 한다. 여기서 주의해야 할 점은 char 형의 경우 char* 형으로 선언해주면 안되고, 배열의 크기를 명시해줘야지 에러가 나지 않는다. 구조체 선언 및 초기화 아래와 같이 구조체 변수를 선언 및 초기화 할 수 있다. 각각의 자료형에 맞게 넣어 줘야 한다. 다 넣어 주지 못한 멤버는 자동으로 0으로 초기화 된다. 구조체 멤버 닷 연산자를 사용하여 ..

프로그래밍/C++ 2021.09.30

[C++] 2차원 배열, 배열 포인터, 배열 초기화, 배열 매개변수

2차원 배열 기본형태 배열은 기본적으로 n차원까지 가능하다. 보통은 너무 복잡해서 3차원도 잘 안쓴다. int iArr2D[Y][X] = {1,2,3,4,5,6}; Y는 행을 X는 열을 나타낸다. int iArr[2][3]; --> 3칸짜리 배열이 2개 즉, iArr[3]이 2개 (2행3열) 바깥이 행에 접근한다. 맨 아래의 그림을 참고하면 이해하기 쉽다. 3차원 배열 기본형태 배열의 초기화 아래 그림처럼 2가지 방법으로 초기화가 가능하다. 이중 for문을 사용하여 초기화 진행 2차원 배열의 포인터 1차원 배열포인터 int* ptr = iArr2D 2차원 배열포인터 자료형(*변수명)[열의 크기] int(*ptr2D)[3] = iArr2D; 더보기 2차원배열의 원소는 1차원 배열을 뜻한다. 따라서 2차원배..

프로그래밍/C++ 2021.09.24

[C++] 1차원 배열, 배열 포인터, 배열 초기화, 배열 매개변수

배열의 기본형태 자료형 변수명[원소갯수] = 초기값 배열 : 배열(array)이란 연관된 데이터를 모아서 통으로 관리하기 위해서 사용하는 데이터 타입이다. 변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 하나의 변수에 저장하기 위한 것이라고 할 수 있다. 여러 개의 데이터를 하나의 변수에 담아서 관리할 수 있는 방법 배열의 초기화 int iArr1[5] = {}; 모두 0초기화 int iArr2[5] = {1,2,3,4,5}; 각 원소에 값 삽입형태 좌측부터 0번째 배열에 값이 삽입 int iArr3[5] = {1,2,3}; 채우지 않은 부분은 각 전부 0 초기화 int iArr4[] = {1,}; 배열 크기가 5개라고 인식하지 못함. 배열 갯수 1개로 인식 int iArr5[]..

프로그래밍/C++ 2021.09.24

[C++]포인터 기본 개념

포인터란? 포인터도 그냥 변수이다. 주소값을 저장하는 변수이다. 포인터의 형태 자료형* 변수명 = 값; 여기서 * 은 에스크리터 연산자라고 부른다. 에스크리터 연산자는 포인터 변수를 선언하는 용도로 사용된다. int* ptr; int * ptr; int *ptr; 에스크리터 연산자를 어디에 붙이나 상관은 없으나 통일성이 있어야 한다. nillptr int* ptr = 0; int* ptr1 = NULL; int* ptr2 = nullptr; 0은 정수이므로 잘 쓰지 않고, 요즘은 nullptr을 많이 사용한다. float f = 0.f; int* ptr = &f; 이렇게 쓰면 안된다. 포인터 변수에 주소값을 담으려면 포인터 변수를 선언할 때 명시한 자료형과 일치하여야 한다. 즉, int* ptr = &f..

프로그래밍/C++ 2021.09.24