목록C++ (19)
NeuroWhAI의 잡블로그
std::numeric_limits::digits10 10진법 표기로 text -> T -> text 변환시 항상 자릿수가 보존되는 최소 자릿수 번호. 다르게 말하면 T 타입의 수로 변환할 문자열은 그 원본 텍스트의 digits10 자릿수까지만 항상 보존이 보장된다. 예) ::digits10 == 2 : "42" -> 42 -> "42"는 가능하지만 "200" -> -56 -> "-56"는 실패하니 2자리가 최대. 예) ::digits10 == 6 : "8.589973e9" -> 8.589974e9 -> "8.589974e9" 물론 어떤 수는 저 너머의 자릿수도 보존되지만 그건 예외일 뿐이고 항상 보장해야하는 경우엔 digits10 값을 이용. std::numeric_limits::max_digits10..
#include using namespace std; class Foo { public: void bar() & { cout
#include #include #include #include using namespace std; // Knuth-Morris-Pratt Algorithm // bush의 앞에서부터 needle의 최초 위치를 찾아 반환합니다. size_t kmp(string_view bush, string_view needle) { const size_t needleLen = needle.length(); const size_t bushLen = bush.length(); // string::find는 패턴 문자열이 비어있을 경우 0을 반환함. if (needleLen == 0) { return 0; } // pi[match] == needle[:match+1]의 최대 동일 접두접미사 길이 vector pi(need..
T object = { .designator = arg1 , .designator { arg2 } ... }; T object { .designator = arg1 , .designator { arg2 } ... }; #include using namespace std; struct Foo { int a, b; float c = 42.0f; }; int main() { cout
memory 헤더에 있는 이 함수들은 초기화 되지 않은 메모리에 관한 기능이 있습니다.초기화 되지 않았다는 것은 생성자가 호출되지 않았다는 것이죠.get_temporary_buffer는 메모리를 할당하며return_temporary_buffer는 메모리를 해제합니다.uninitialized_*는 초기화되지 않은 메모리에 대해 생성자를 호출하며 특정 알고리즘을 수행합니다. 예시를 봅시다. (C++17 이상에서만 컴파일 됨) #include #include #include class Foo { public: explicit Foo(int data) : data(data) { std::cout
https://ideone.com/jBCPmV #include using namespace std; int main() { // a[i] == *(a + i) == *(i + a) == i[a] int a[] = { 1, 2, 3, 4 }; cout
원서는 2017년에 나왔고 저는 번역서를 구매했습니다. 그런데 찜 해놓았다가 구매 직전, 우연히 리뷰를 봤는데 번역이 이상하다고 해서 좀 망설였지만 결국 샀습니다. 하지만 제가 그동안의 꾸준한 구글 번역기 사용으로 번역체에 익숙해졌기 때문에 책 내용 이해에 크게 무리는 없었습니다(?) (번역기가 뱉는 말이 한글로 된 한국어가 아닌 언어라도 언어는 언어이니 이해할 수 있습니다) 아무튼 이 책은 C++11부터 C++20까지의 표준 라이브러리를 이용한 동시성 프로그래밍을 소개하는 책입니다. 다만 중요한건 어디까지나 맛보기라는 점입니다. 라이브러리를 사용하는 예제는 꽤 있지만 동시성 프로그래밍을 위한 지침의 구체적인 적용 예시는 많이 없습니다. 근데 난이도도 쉬울 줄 알았더니 처음부터 듣도 보도 못했던 메모리 ..
std::nth_element는 부분 정렬 알고리즘입니다.구체적인 동작은 이름에서 알 수 있듯이 n번째 요소를 얻을 수 있게 해주는 녀석인데요.무슨 기준으로 n번째냐고 하면 정렬되었을 때를 말합니다.v = [1 3 2 4]이고 n을 0부터라고 하였을 때 n=2라고 하면 알고리즘 수행 후 v[2]는 3이 됩니다.또한 v[:2]은 v[2]보다 작거나 같은 수만 있게 되며 당연히 v[3:]은 v[2]보다 작거나 큰 수만 있게 됩니다.(cppreference의 설명으로 하자면 v[:2]는 v[3:]의 수 보다 작거나 같다입니다.)비교 함수를 바꿔 주면 다르게 정렬된 상태에서의 n번째 요소를 얻을 수 있습니다. 대략적인 형태는 template void nth_element( Ran..
https://en.cppreference.com/w/cpp/thread/shared_mutexhttps://en.cppreference.com/w/cpp/thread/shared_lock 딱히 쓸 일이 없어서 몰랐는데 책에서 나왔으니 한번 봤습니다.shared_mutex 헤더에 있다고 하네요. 아래는 사용 예시. (mutex와는 별개의 이유로 C++17 이상에서만 컴파일 됩니다!) #include #include #include #include #include // 원자적인 카운터 class AtomicCounter { private: int m_counter = 0; mutable std::shared_mutex m_mutex; public: int getCount() const { std::shar..
https://en.cppreference.com/w/cpp/atomic/memory_orderhttps://stackoverflow.com/questions/12346487/what-do-each-memory-order-meanhttp://egloos.zum.com/sweeper/v/3059861https://www.slideshare.net/seao/c-atomic 허.. 이런게 있을 줄은 몰랐네요.새로 산 책에서 계속 나오는데 설명은 못알아먹겠고 ㅠㅠ아래는 한번 정리해본 내용인데 틀린 내용 지적 부탁드립니다 ㅠ // Thread 1: r1 = y.load(memory_order_relaxed); // A x.store(r1, memory_order_relaxed); // B // Thread 2: ..