목록개발 공부/C++ 약점공략 (30)
음악, 삶, 개발
결국 vector 간에 = 연산자를 사용할때 라고 말할수있다. std::vector vec1 {1, 2, 3, 4}; std::vector vec2; vec2 = vec1; // assignment operator 하지만 위와 같이 = 연산자를 써야할때 우리는 3가지의 경우로 나눌수있다. 1. vec1 에는 요소들이 있고, vec2 는 비어있을때. 2. vec1 은 비어있고, vec2 에는 요소들이 있을때. 3. vec1, vec2 둘다 요소들이 있지만 vec1 이 더 많은 요소를 가지고있을때. 4. vec1, vec2 둘다 요소들이 있지만 vec2 가 더 많은 요소를 가지고있을때. 나는 위와 같은 각 경우들을 실행했을때 실제로 무엇이 일어나는지 보고..
Cat 클래스의 객체를 가지고있는 Cats 클래스가 있다. 한개의 Cats 객체를 만드려할때, 기존의 Cats 객체를 복사하여 만드는 코드이다. Copy Constructor 안에서 range based for 루프를 사용하기위해, begin() 과 end() 를 정의해주어야한다. class Cat { public : Cat(int toAge) : age(toAge) {} int getAge() { return age; } private : int age; }; class Cats { public : Cats() {} Cats(const Cats& other) { for (const auto& cat : other) add(cat); } void add(const Cat& cat) { cats.push_..
int main () { std::vector v = { 0, 1, 2, 3, 4, 5 }; for (const int& i : v) // access by const reference std::cout
곧바로 vector 를 사용하지않고, 나의 클래스를 만들고 멤버로 vector 를 사용하는 경우가 자주있다. 이때는 vector 를 가지고있는 클래스안에 begin() 과 end() 함수를 아래와 같이 정의해주면 된다. class Cat { public : Cat(int toAge) : age(toAge) {}; int getAge() const { return age; } private : int age; }; class Cats { public : Cats() {} void add(const Cat& cat) { cats.push_back(cat); } /* to use range based for loop */ auto begin() { return cats.begin(); } auto begin(..
vector 가 내가 만든 클래스를 객체로 가지는 경우가 자주 발생한다. std::sort(begin(), end()) 를 사용하여 나의 vector 를 sort 하고자할수있다. 이를 위해서는 나의 클래스 내부에 연산자
C+11 에서는 constructor 의 재사용을 허용한다. class SomeType { public: SomeType(int new_number) : number(new_number) {} SomeType() : SomeType(42) {} private : int number; }; 참고 링크 Reusable constructors C++ Object construction improvement
함수안에 throw 를 명시하면, caller 가 try 후 catch 할수있는것이 exception 인데, throw 를 하지않겠다는것을 컴파일러에게 명시하는것이 함수뒤에 noexcept 를 붙이는것이라고한다. 하지만, Juce 에서는 거의 쓰이지않을것이라고. 아래 참고자료에 관련 Juce 포스팅을 첨부해놓았다. 참고자료 Juce and Exception Handling? 씹어먹는 C ++ - effective modern c++ : noexcept 선언 [C++] keyword : noexcept
소개 vector를 떡 주무르듯 편하게 사용하기 위해 반드시 알아야 하는 STL 라이브러리다. #include 위와 같이 include후 std:: 를 붙여 사용한다. 이 포스트는 C++11 기준이며, C++20 이 올해 말 출시한다고 한다. 하지만 C++20이 출시되어도, 바로 내가 사용할수있는것은 아니므로, 내가 사용할수있게 되었을 때 이 포스팅도 업데이트해야 함. 아래 안에 들어가있는 함수의 총 리스트를 일단 나열하고, 그후 각각을 설명해나간다. 이제 배우겠지만, 이 안에 함수들은 인자로 iterator 를 받는다. 우리가 vector 에서 index 대신 iteartor 를 쓰는 이유도 이런 표준 라이브러리의 함수들을 가져다 쓰기 위함이다. (index 대신 , iterator 를 인자로 받기때문..
생성자, 연산자 오버로딩 방식과 상황에 따라 호출되는 생성자, 연산자 생성자 : constructor 기본 생성자 : default constructor 복사 생성자 : copy constructor 이동 생성자 : move constructor 연산자 : operator 대입 연산자 : assignment operator 이동 대입 연산자 : move assignment operator 파괴자 : destructor 위에서 보다시피, 영어가 한글보다 훨씬 길기에, 그냥 한글로 사용하겠다. 일단 아래의 그림을 머리속에 박제하도록한다. 이해는 나중에 해도 된다. 상황에 따라 어떠한 생성자와 어떠한 연산자가 호출되는지 외워야한다. 위의 생성자나 연산자중, 뒤에 noexcept 가 붙어야하는것들이..
소개 vector 는 C++ 에서 가장 우선적으로 사용해야할 필수적인 컨테이너다. 나는 vector 를 배우기전, vector 를 사용하는것은 JS 의 array 와 비슷할거라 생각했지만, 불행히도 완전히까지는 아니지만 매우 다른 사용법을 필요로한다. 이 C++ 약점공략부분은 원래는 나의 약점에만 집중하지만(예를 들어, vector 의 push_back 에 대해서만 다룬다던지) 나는 vector 의 전체적인 것들을 처음부터 정리하고자한다. vector 의 초기화 std::vector v1 {1, 2, 3}; // v1 : {1, 2, 3} (리터럴) std::vector v2 (3, 6); // v2 : {6, 6, 6} (3개의 6을 만들라) std::vector v3 (2); // v3 : {0, 0..