목록c++ 문법 (17)
거의 알고리즘 일기장
#include #include using namespace std; int main() { //+기호 출력 cout.setf(ios::showpos); cout
setw, setprecision #include #include using namespace std; int main() { double a = 1.222222f; char buf[5]; //5개까지 입력을 받음, 마지막은 nullchar용 cin >> setw(5) >> buf; cout
string의 사용방법들 #include #include #include #include using namespace std; //osstream을 이용해서 문자열로 변환하기? template string Tostring(T x) { ostringstream osstream; osstream > x) ? true : false; } int main() { string my_string(Tostring("hello")); double d; if (FromString(my_string, d)) cout
1. iterator란? map, set, vector 등등 여러 컨테이너를 조회하는데 공통적으로 쓰이는 개념이다. 2. 사용법 #include #include #include #include using namespace std; int main() { set s; vector vec = {1, 2, 3, 5}; s.insert(2); s.insert(4); //방법 1 for (auto it = s.begin(); it != s.end(); it++) cout
1. weak_ptr의 필요성 shared_ptr은 같은 곳을 몇 개의 객체에서 가리키는지를 추적하고, 그 수가 0 이 되야만 비로소 해제를 시켜주는 방식의 포인터이다. 주제를 조금 넘어서지만 shared_ptr가 왜 필요한지 정말 간단히 예를 들어보자면 #include using namespace std; int main() { int c = 5; int* a = &c; int* b = a; delete a; //오류!! cout
1. Lvalue와 Rvalue Lvalue와 Rvalue가 무엇일까? 여러 기준으로 살펴보겠다. 1) 대입연산자 기준으로 왼쪽이 Lvalue, 오른쪽이 Rvalue 2) 주소값의 유무 1) 대입연산자 기준으로 왼쪽이 Lvalue, 오른쪽이 Rvalue int a = 1; int b = 1; 이렇게만 보면 위의 말이 성립한다. 하지만 int a = 1; //??? int b = a; 이때는 1)의 기준이 성립하질 않는다. 그러면 이번에는 2) 주소값의 유무로 판단해보자. int a = 1; int b = 2; cout
1. 얕은 복사와 깊은 복사가 필요한 이유 일반적으로 객체를 복사할때는 새로운 객체를 만들어서 그 안에 복사할 객체들을 복사한다. 이때 밑의 그림과 같은 오해를 할수도 있다 하지만, 참조된 값을 복사하면 밑의 그림과 같이 저런식으로 참조값만 복사가 된다. 이게 뭐가 문제냐?? 라고 생각할수도 있지만 충분히 문제가 생길수 있다. 예를들면 만약 하나의 클래스가 있고 A와 B는 그 클래스의 인스턴스이다. 그리고 B는 A의 값을 복사했다. 이때 소멸자에 클래스 포인터 변수를 delete 시켜주는 기능이 있다면 A가 소멸할땐 문제가 없겠지만 뒤이어 B가 소멸할때 분명히 에러가 날것이다. ( 밑의 코드 참조 ) #include using namespace std; class A { public: int value;..