반응형

언어/C++ 27

[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++ STL] vector 선언 및 초기화 (1차원, 2차원)

개요 C++의 STL 중 하나로, 한 번에 한 타입만 저장 가능합니다. 이번 게시글에서는 vector의 선언과 초기화에 대해 다뤄보겠습니다. 상세 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include using namespace std; int n, m; // 기본적인 1차원 vector 선언 vector v; // 크기가 5인 1차원 vector 선언 vector v(5); // 크기가 5이고 초기값이 1인 1차원 vector 선언 vector v(5, 1); // 기본적인 2차원 vector 선언 vector v; // n x n 2차원 vector vector v(n, vector(n)); // 초기값이 1인 n x m 2차원 vector vector v(..

언어/C++ 2021.10.03

명백한 호출의 괄호 앞에 오는 식에는 함수 (포인터) 형식이 있어야 합니다 오류

명백한 호출의 괄호 앞에 오는 식에는 함수 (포인터) 형식이 있어야 합니다 vector를 사용하다가 떴던 오류. 구글링 해보니 내장 함수의 이름과 변수의 이름이 똑같아서라는데... v라는 내장 함수가 있을 리는 없고 알고 보니 v[0].first자체가 변수기 때문에 괄호를 붙여주지 말고 사용해야 했다. 괄호를 제거해주면 잘 출력된다. 내장함수와 이름이 겹치는 변수를 사용할 때 뜨는 오류와 동일하다. 위의 경우에는 algorithm.h 안에 max라는 내장 함수가 있어 max라는 변수를 사용할 수 없다 int max를 _max 등으로 바꾸어주면 된다.

언어/C++ 2021.09.18
반응형