반응형

언어 33

[C++] #pragma once와 #ifndef ~ #endif

컴파일시에 C++의 #include는 해당 헤더의 내용이 복사되어 들어오게 된다. 이 때, 같은 내용의 헤더가 두 번 이상 복사될 수 있는데, 이것을 막아주는 게 #pragma once와 #ifndef ~ #endif이다. 차이점은 다음과 같다. #pragma once는 컴파일 동안 단 한 번만 처리를 하므로 더 빠른 컴파일이 가능해진다. 단, 일부 구형 컴파일러에서는 지원이 안 되는 경우도 있다. #ifndef는 if not defined의 약자이다. 정의하지 않았다면 #define 부터 #endif 까지의 코드를 include 한다. #ifndef EXAMPLE_H #define EXAMPLE_H #endif

언어/C++ 2021.12.26

[C++] 스마트 포인터

개념 C++은 C#처럼 Gabage Collecter(GC)가 없다. 따라서 메모리 할당을 따로 하고, 해제 해줘야한다. 예를 들어 new로 할당해준 경우에는, delete로 해제해줘야 한다. 해제해주지 않으면, memory leak(메모리 누수)이 발생하게 되고, 이는 프로그램 오류의 원인이 된다. 스마트 포인터를 사용하면, 사용이 끝난 메모리를 자동으로 해제해 주므로, 이런 오류를 방지할 수 있다. 헤더 파일 : memory 종류 1. unique_ptr 하나의 스마트 포인터만이 특정 객체를 소유할 수 있도록, 객체에 소유권 개념을 도입한 스마트 포인터 이동은 가능하지만, 복사는 불가능하다. 따라서 참조 전달은 가능하지만, 값 전달(복사 생성자)은 불가능. 2. shared_ptr 하나의 특정 객체를..

언어/C++ 2021.12.15

[C++] string 클래스 정리

개요 C++에서 사용되는 string 클래스를 정리한다 목록 length() : 문자열의 길이를 반환한다. size() : 해당 string 객체가 메모리에서 실제 사용하고 있는 크기를 나타낸다. length()와 size()는 언제나 같은 값을 반환하지만, 그 의미에는 차이가 있다. append() : 문자열 끝에 다른 문자열을 추가한다. 문자열1.append(문자열2) : 문자열1의 끝에 문자열2를 추가한다. 문자열1.append(문자열2, 문자열2의 시작 위치, 개수) : 문자열1의 끝에 문자열2의 시작 위치부터 해당 개수만큼 문자열을 추가한다. 문자열.append(개수, 추가할문자) : 추가할 문자를 개수만큼 끝에 추가한다. find() : 특정 문자열을 찾아, 그 시작 위치를 반환한다. 문자열이..

언어/C++ 2021.12.09

sstream을 사용하여 문자열 split 하기 (C++)

개요 C++을 사용하여 문자열을 입력받았을 때, 구분자로 나눠주기 밑의 코드는 구분자가 ' '(공백)일 때의 예시이다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #include #include #include using namespace std; int main() { string str= ""; istringstream ss(str); string stringBuffer; vector v; v.clear(); //구분자가 , 이라면 getline(ss, stringBuffer, ',')쓰면됨 while (getline(ss, stringBuffer, ' ')) { v.push_back(stringBuffer);..

언어/C++ 2021.11.21

[C++] 부동 소수점

개요 C++에서 소수를 저장할 때 부동소수점 자료형을 이용한다. 상세 1/3 = 0.3333...과 같은 경우 코드 내에서 무한한 소수점을 표현할 수 없으므로 특정 자리까지만 저장하고 나머지는 손실된다. std::cout의 경우 기본 정밀도는 6으로, 소수 아래 6자리까지는 유효하고, 그 아래부터는 오차가 발생한다. cout.precision(n)을 사용하게 되면 n자리까지 cout이 표시하게 된다. (cout

언어/C++ 2021.11.12

[C#] Static

개요 Static 필드는 인스턴스를 생성할 때마다 메모리에 새로 생성되는 Non-static 필드들과 다르게 프로그램 실행 후 해당 클래스가 처음으로 사용될 때 한 번 초기화되어 동일한 메모리를 사용한다. Static 변수 (정적 변수)는 인스턴스에 종속적이지 않고 클래스에 종속적인 변수이다. 호출 시에는 [클래스명.변수 이름]으로 호출한다. Static 메서드 (정적 함수) 또한 인스턴스에 종속적이지 않고 클래스에 종속적인 메서드이다. 마찬가지로 호출 시에는 [클래스명.메서드 이름]으로 호출한다. Static 메서드에서는 정적 변수가 아닌 일반 멤버 변수를 호출할 수는 없다. Static 클래스 (정적 클래스)는 모든 클래스 멤버가 static으로 선언되어야 하고 생성자를 만들 수 없다. (Static..

언어/C# 2021.10.14
반응형