목록전체 글 (67)
헤더파일
default_random_engine 의 객체는 함수처럼 호출할 수 있다.->()연산자가 오버로딩되어있다.dre() 이렇게만 써도 랜덤 값을 뽑아낼 수 있다. 즉 호출가능객체의 일종인ㄴ 함수객체이다.함수객체는 상태(퍼블릭맴버)를 갖는다. uniform_int_distribution uid(0, 1000) uid(dre) 값은 랜덤엔진에서 나온 값을 균일하게 범위안에 위치하게 하는 것이다. 함수를 부를때마다 리턴값을 다르기 때문에 값은 함수 밖에 저장되있다.이런 함수는 매번 부를 때마다 값이 달라지기 때문에 순수한 함수가 아니다. 분포는 normal_distribute와 uniform_distribute가 있다. int main(){default_random_engine dre;random_device ..
int main(){Model a(1234);vector v; v.push_back(a);} 어떤 메모리에 이름을 붙였다는건 컴파일러에게 나 여기 읽고 쓸거니까 없애지마라고 명령한 것이다. int main(){vector v; v.push_back(Model{1234});} 이렇게 이름 없는 객체를 넣으면 컴파일러가 판단해서 없애고 이동생성자를 부른다.더 정확하게 쓰면 v.emplace_back(1234) 을 써서 알아서 자료형도 유추해서 넣도록 한다.벡터는 뒤쪽에 데이터를 삽입하는 게 좋다. 전통적인 qsort로 벡터 비교. //벡터에 플레이어 1000명의 정보를 만들어 넣어보자//플레이어는 id,score1,score2 class Player{private:string id; //플레이어 이름int ..
STL은 자료형이 같은 자료만 담는다.사용자는 어떤 컨테이너를 쓴다 하더라도 이터레이터를 통해 접근할 수 있다.반복자는 포인터와 유사한 기능을 함. initializer_list a = {1, 2, 3, 4, 5};vector vec1(a);auto iter = vec1.begin();//읽기/쓰기용으로 접근auto citer = vec1.cbegin();//읽기 용으로만 접근 for (auto p = v.cbegin(); p != v.cend(); ++p){cout
컨테이너는 자료구조를 말합니다. 종류는 이렇습니다. 1. sequence contatiner arrayvectordequelistforward list 2. associative contatiner setmultisetmapmultimap 3. unordered associative contatiner(hash) unordered setunordered multisetunordered mapunordered multimap 벡터 initializer_list a = {1, 2, 3, 4, 5};vector vec1(a); #include 헤더를 써서 초기화목록을 생성한 후 초기화해도 된다. 정식 자료구조 13개가 있는데 자료구조를 달라도 순식간에 옮겨서 만들 수 있다. int main(){initiali..
c++11에 들어오면서 꼭 해야하는게 있습니다.-const 일관성을 유지할것-raw pointer를 사용하지마라-STL을 적극사용하라-range-based for loop와 auto를 적극 사용하라-가능한 한 모든곳에서 lamda를 사용하라 unique_ptr 자원을 독점한다.shared_ptr 자원을 공유한다. int main(){Model* p = new Model;//Save();} 이런 식으로 해도 문제는 없다. 운영체제가 알아서 회수는 해줍니다.좀 더 자원을 효율적으로 사용하고 싶다면 밑에서 delete p 해주면 됩니다.하지만 메모리를 쓰고 지우기까지는 많은 시간과 공간의 차이가 있습니다. 만드는 함수에서 바로 지우는 경우는 거의 없습니다. 때문에 해제하지 않는 객체가 존재해 메모리릭이 많이 ..
sizeof(vector) 32비트 - 디버깅 모드 일땐 16바이트, 디버깅을 위한 정보가 필요해서 - 릴리즈 일땐 12바이트64비트 - 디버깅 - 24비트 릴리즈 - 32비트 vector가 3개를 받기로 했다면 힙에 3개를 설정하고 메모리를 차지한다.앞뒤 공간은 내꺼가 아니기 때문에 10개를 다시 잡는다면 다이나믹하게 공간을 새로 잡아 이사가고 전에꺼를 지운다.벡터는 size, capacity, 힙가리키는 pointer로 구성. class Model{public:int size{0};char* data=nullptr;int id;public:Model() :id{++gid} { cout
min 함수는 템플릿 함수이다.min(1,3) 을 쓰면 디폴트로 작은 정수를 뽑아내서 1을 내보낸다.하지만 min(1,3, [](){ }) 람다로 다른 기준을 줄수도 있다. class Dog{public:Dog(int age) :m_age(age) {}int m_age = 0;}; cout other.m_age;}friend ostream& operator
c언어의 랜덤함수는 모든 숫자가 같은 확률로 나오고 16비트지만 c++의 랜덤엔진은 원하는 대로 어떤 부분이 더 많이 나올 수 있는지 정할 수 있고 32비트이다. 지역변수는 스택에 저장된다. 스택은 기본적으로 접시를 조금씩 쌓아서 바로바로 쓸려고 쓰는 것.스택의 용도는 현재 정보를 잠시 저장하는 용도로만 쓴다. 엄청 큰 자료는 전역변수로 잡아도 되지만 초기화한 전역변수는 실행파일 크기가 커진다. 변수의 자료를 하드디스크에 저장하기 때문이다. 실행파일은 실행중에 메모리에 올라오기때문에 매우 비효율적이다. 전역변수는 데이터 은닉에도 비효율적이지만 실행파일 커지는 문제도 있다. int n[10000000] -> 102kb int n[10000000]{333}; -> 47000kb 그래서 큰 자료는 동적할당으로..