목록C++ (29)
헤더파일
templatevoid f(T a, T b){auto temp = *a;*a = *b;*b = temp;} int main(){vector v{ 1,2,3,4,5 };//f는 두 반복자가 가리키는 값을 교환하는 함수f(v.begin(), v.end() - 1); for (auto& data : v){cout
텍스트파일은 UTF-8형식으로 BOM(Byte order Marker)이 있는 파일입니다. 그래서 출력해보면 앞에 이상한 문자가 나옵니다. 그래서 3바이트를 건너뛰어야 합니다. int main(){string fname = "이상한 나라의 앨리스.txt";ifstream in(fname);char c; if (!in){cout > c >> c; map cimap;while (in >> c){cimap.operator[](c)++;} for (const auto& d : cimap)cout > c){cimap.operator[](c)++;}//출현 횟수가 키가 되는 맵을 만든다.map icmap;for (const auto& d : cimap){icmap.insert(make_pair(d.second, d..
Set - 키 값에 따라 정렬 Map - 키/값 쌍을 키 값에 따라 정렬 Ordered_set/map - 키를 해싱하여 정렬할 곳을 결정 키는 정렬의 기준으로 삼고자 하는 값이 됩니다. 키는 프로그래머가 어떤 값이든 정할 수 있습니다. 항상 정렬하고 있다는 건 빨리 찾기 위해서 쓰는 겁니다. 벡터에도 insert함수가 있어 원하는 위치에 넣을 수 있지만 엄청 안좋은 프로그래밍입니다. 연관컨테이너에서 insert는 알아서 집어넣어줘라는 동작입니다. 연관컨테이너는 내가 위치를 지정할 수 없기 때문에 의미가 있는 것입니다. STL내부에서 알아서 트리의 균형을 잡아주고 정렬하기 때문에 자리를 지정하는 push_back같은 함수는 말도 안됩니다. Set set은 키와 벨류가 하나인 컨테이너입니다. set s{1,..
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 해주면 됩니다.하지만 메모리를 쓰고 지우기까지는 많은 시간과 공간의 차이가 있습니다. 만드는 함수에서 바로 지우는 경우는 거의 없습니다. 때문에 해제하지 않는 객체가 존재해 메모리릭이 많이 ..