일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- BOJ
- 백준
- Nebula
- tour of go
- C++ library
- c++ heap
- JUCE library
- LOB
- 공룡책
- JUCE
- C언어
- 리듬게임
- go channel
- vim-go
- 프로그래밍
- 연결리스트
- JUCE 튜토리얼
- 알고리즘
- 코딩
- C++ gui 라이브러리
- gui
- OS
- C++ gui
- Docker
- JUCE라이브러리
- a tour of go
- go
- 운영체제
- 자료구조
- C++
- Today
- Total
목록Programming/C++ (36)
CafeM0ca
std::vector는 많은 C++ 프로그래머들에게 사랑받는 컨테이너다.배열은 정적이라 컴파일타임에 이미 메모리 공간에 자리잡고 있어서 인덱스 범위 안에만 있다면 접근이 가능하지만벡터는 동적이라 컴파일타임에 메모리가 자리잡고 있지 않다. 간간히 2차원 벡터가 필요할 경우가 있다.이 글에서는 간단하게 설명하고자 한다. 벡터의 기본 선언은 다음과 같다. std::vector v; std::vector도 하나의 클래스로써 자료형으로 취급된다. 따라서 다음과 같은 선언이 허용된다. std::vector dv; 위 선언을 통해 간단하게 2차원 벡터를 만들었다. 그러나 여기서 끝나면 포스팅 안했다. 서론에서 말했듯이 벡터는 동적이므로 위와같이 선언한 후 인덱스에 접근하면 out_of_range 에러 메시지를 볼 수..
원본 : https://developers.eos.io/eosio-home/docs/how-it-all-fits-togethereos tool을 사용하기 위해 각각의 도구가 어떻게 다른 도구들과 상호작용하는지 살펴보자. nodeos(node+eos) : EOSIO의 노드 데몬 코어로 노드를 실행시키기 위해 플러그인과 함께 구성될 수 있다. cleos(cli+eos) : CLI로 블록체인과 지갑을 관리기위해 상호작용한다. keosd(key+eos) : 지갑에서 EOSIO 키를 안전하게 저장하는 컴포넌트다. eosio-cpp : eosio.cdt의 일부면서 c++코드를 wasm으로 컴파일해주고 ABI를 만들어준다. 다음은 eos의 아키텍쳐다.
eosio.cdt을 빌드할때 의존성이 있다.바로 boost... eosio.cdt/build.sh SYS를 하기전에 boost 라이브러리부터 깔아주자.ubuntu에서 boost install > http://cafemocamoca.tistory.com/99
조건변수는 메시지를 통한 스레드의 동기화에 사용된다.에 정의되어 있다.한 스레드가 메시지 발신자 역할을 하면 다른 스레드는 수신자가 된다.수신자는 발신자의 알림을 기달리게 된다. 전형적으로 발신자-수신자 또는 생상자-소비자 흐름에 쓰인다. 출처: (cpp_reference) 조건변수 멤버함수들 #include #include #include #include std::mutex mutex_; std::condition_variable condVar; using namespace std; bool dataReady{ false }; void doTheWork() { std::cout
std::call_once는 callable을 등록할 수 있다.std::once_flag는 하나의 등록된 함수만이 호출될 수 있음을 보장한다.둘 다 에 있다. std::call_once- 오직 하나의 함수가 한 번만 수행됨. 어느 함수가 선택될지는 정의되지 않음. 선택된 함수는 std::call_once 호출과 동일한 스레드에서 실행- 성공적으로 완료되기 전까지 어떤 호출도 리턴되지 않음.- 예외로 종료시 caller에게 전파. 이에 따라 새로운 함수가 선택되고 실행됨. #include #include #include std::once_flag onceFlag; void do_once() { std::call_once(onceFlag, []() { std::cout
explicit은 명백한 이라는 뜻이다. C++에서는 파라미터의 형변환을 방지하는데 사용한다. explicit void func(int a) { std::cout
이 규칙들은 C++에서 지켜야하는 것들이다. https://en.cppreference.com/w/cpp/language/rule_of_three Rule of Three소멸자, 이동 생성자, 이동 복사 연산자를 정의해두자. Rule of Five소멸자, 이동 생성자, 복사 생성자, 이동 대입 연산자, 복사 대입 연산자 다섯 가지 특수 멤버 함수들을 구현해놓자. Rule of Zero소멸자, 이동 생성자, 복사 생성자, 이동 대입 연산자, 복사 대입 연산자 다섯 가지 특수 멤버 함수들을 필요로 하지 않도록 디자인 하는 것이다.기본적인 방법으로는 구식 스타일의 메모리 할당을 피하는 것이다.A클래스를 2차원 배열로 동적할당 하기 위해 A**으로 선언하지 말고 vector 이런식으로 사용하자. vector는 ..
hyu를 진행하던중 맵라인 위에 노트가 그려져야하는데 맵은 덮어져서 노트만 보이는 상황이 생겼다. (이전 게시글 참고)무엇이 문제인지 고민하다가 혹시(?)하고 짐승적인 감으로 생성순서를 바꿔주었다. before)Map map;NoteManager noteManager; after)NoteManager noteManager;Map map; 결과는 원하던 대로 잘 작동하였다.먼저 선언된 컴포넌트 순서대로 레이어가 깔리는 형식이라 그랬던 것이다.
유니폼 초기화는 narrowing(축소변환)을 방지할때 사용한다. class A{ int num; public:A(int i) : num(i) {}A() : A{1} // 생성자 유니폼초기화}; int main() { A a{3.14}; // 컴파일 경고! A aa{3}; // 정상 int * arr = new int[4]{1,2,3,4}; // 동적할당에서 활용가능}
상수표현식. 상수값이 요구되는 곳에 상수 표현식을 사용한다. 다음 코드는 C++에서 오류로 처리된다. const를 constexpr로 바꿔주면 컴파일 오류가 발생하지 않는다. constexpr은 const와 마찬가지로 컴파일 타임에 계산된다.constexpr을 사용하면 컴파일러가 최적화를 훨씬 효과적으로 할 수 있다. 단, 함수를 constexpr로 선언하려면 다음과 같이 꽤 많은 제약 사항을 지키자.- 함수의 본체는 한 개의 리턴문으로 만들어져야하고 goto문이나 try/catch 블록이 포함되면 안되며 예외를 발생시켜도 안된다. 단, 다른 constexpr을 호출하는것은 허용된다.- constexpr으로 선언하려는 대상이 클래스의 멤버 함수일 경우 그 메서드는 virtual로 선언될 수 없다.- 모든..