본문 바로가기

Programming/CPP11&14

[C++11] 배열을 편리하게 사용할 수 있는 std::array 배열은 한 번 크기가 정해지면 동적으로 변경되지 않습니다.동적으로 크기를 변경하려면 벡터 등의 STL 컨테이너를 활용하면 됩니다.배열을 STL 컨테이너 형태로 사용하는 것이 바로 std::array입니다.동적인 할당과 해제가 없어서 성능상 이점이 있는 배열을 편리한 사용을 할 수 있도록 해줍니다.std::array는 헤더를 포함한 이후에 사용이 가능합니다.기본적인 std::array의 사용 방법은 다음과 같습니다. #include #include int main() { // initialization std::array data = {0, 1, 2, 3, 4}; // get size std::cout 더보기
[C++11] 가중치를 적용해서 랜덤 넘버(Random Number) 생성 C++11에 추가된 Random Number 생성은 좀 더 정교한 난수 생성이 가능합니다.기본적인 난수 생성에 관한 내용은 아래 링크에서 확인 가능합니다.2015/05/22 - [Programming/CPP11&14] - [C++11] 새로워진 random number 생성랜덤한 번호를 생성할 때 각 값마다 가중치를 주고 싶은 경우가 있습니다.경품을 추첨할 때 각 등수마다 다른 확률로 선별하고 싶을 때 사용 가능합니다.가중치가 적용된 랜덤은 이산 분포(Discrete Distribution)를 활용해서 쉽게 구현이 가능합니다.생성 코드는 다음과 같습니다. #include #include template int MakeRandNum(std::vector vecProb) { std::random_device.. 더보기
[C++11] 초기화자 리스트(initializer list)와 std::initializer_list C++11 이전의 초기화에는 다양한 방법이 사용되었습니다. 동일하지 않은 초기화 방식으로 복잡한 C++ 문법을 더 복잡하게 만들었습니다. C++11에서는 {...}(braced-init-list)를 사용한 동일한 초기화 문법을 제공합니다. 기존에는 구조체나 구조체 배열 등의 경우 다음과 같이 {...}의 리스트로 초기화가 가능했습니다. #include using namespace std; struct MyData { int myInt; double myDouble; }; int main() { MyData data[3] = { {1, 3.3}, {2, 4.4}, {3, 10.1} }; cout 더보기
[C++11] Storage class specifiers에 thread_local 추가 Storage class specifiers는 기존에 register, static, extern, auto가 존재했습니다.auto는 의미가 없기 때문에 C++11에서는 다른 용도로 사용됩니다.2014/12/10 - [Programming/C++11&14] - [C++11] auto 키워드C++11에는 thread를 지원하기 위해서 thread_local이 추가되었습니다.TLS(Thread Local Storage)를 지원하기 위해서 사용됩니다.하나의 변수를 선언하면 각각의 thread에 별도로 적용됩니다.thread_local은 Visual Studio 2013은 지원하지 않고 Visual Studio 2015부터 지원합니다.thread_local은 다음과 같이 사용하면 됩니다. #include #in.. 더보기
[C++11] std::mutex를 통한 thread 동기화 2015/06/28 - [Programming/C++11&14] - [C++11] thread 지원 - future를 통한 return값 획득 (2)이미 대부분의 OS는 동기화를 위한 다양한 장치가 마련되어 있습니다.thread가 C++11에서 직접 지원하면서 동기화를 위한 std::mutex가 추가되었습니다.헤더는 이며 사용 방법은 다음과 같습니다. #include #include #include std::mutex mtx; void ThreadFunc(int nID, int& nVal) { for (int i = 0 ; i < 5 ; ++i) { mtx.lock(); std::cout 더보기
[C++11] thread 지원 - future를 통한 return값 획득 (2) 2015/06/27 - [Programming/C++11&14] - [C++11] thread 지원 (1)C++11의 thread에서 return으로 결과를 받는 방법입니다.결과를 받는 방법은 약간 복잡할 수 있습니다.먼저 std::promise라는 클래스 템플릿이 추가되었습니다. 헤더에 추가되어 있습니다.promise는 값이나 예외를 저장할 수 있는 기능을 가지고 있습니다.그리고 promise 객체를 통해서 생성되는 std::future를 통해서 나중에 결과를 얻을 수 있습니다.기본적인 코드는 다음과 같습니다. void ThreadFunc(std::promise& retVal) { retVal.set_value(1); } int main() { std::promise p; auto f = p.get_f.. 더보기
[C++11] thread 지원 (1) C++11에 언어 차원의 thread를 지원하게 되었습니다.OS에 상관없이 사용이 가능하며 전달할 수 있는 인자의 형식도 자유롭게 사용이 가능합니다.thread는 헤더에 정의가 되어있습니다.먼저 간단한 thread의 예제입니다. #include #include void ThreadFunc(int nVal) { std::cout 더보기
[C++11] 새로워진 random number 생성 난수(Random number) 생성은 일반적으로 확률 값이 필요한 경우에 사용이 됩니다.프로그래밍을 처음 배울 때, 로또 번호 생성기를 제작할 때 쓰이기도 합니다.그 외에 난수를 기반으로 하는 암호화에도 활용이 됩니다.기존의 난수 생성은 다음과 같습니다. #include #include #include int main() { srand((int)time(0)); int nRand1 = rand(); int nRand2 = rand() % 11; std::cout 더보기