본문 바로가기

c++11

C++ string (문자열)의 부분 문자열 추출 (substr) C++ 문자열을 다루다 보면 문자열의 일부를 추출해야 하는 상황이 있습니다. 예를 들어, 파일의 확장자 부분만 추출하고 싶을 때 부분 문자열 추출이 필요합니다. C++ string 클래스는 부분 문자열 추출을 위한 substr()이라는 메소드를 가지고 있습니다. string 클래스의 substr()을 활용하는 방법을 알아보겠습니다. string::substr()은 다음과 같은 형태의 함수입니다. string substr (size_t pos = 0, size_t len = npos) const; 시작 지점(pos)과 길이(len)를 전달받아서 부분 문자열을 리턴합니다. 기본값으로 pos는 0으로 지정되어 있으며 len은 npos가 지정되어 있습니다. len은 문자열의 마지막 문자보다 더 긴 길이가 입력되.. 더보기
C++ 소수점 올림/반올림/내림 방법 C++에서 소수점을 올림 하거나 내림, 혹은 반올림해야 하는 경우가 있습니다. C++의 cmath 헤더에는 올림/반올림/내림을 위한 ceil, floor, round함수가 존재합니다. C++에서 올림/반올림/내림을 하는 방법을 알아보겠습니다. 1. 올림/반올림/내림 방법 cmath 헤더에는 ceil()과 floor() 함수가 존재합니다. ceil() 함수는 올림을 위한 함수이며 floor() 함수는 내림을 위한 함수입니다. 그리고 C++11에서 반올림을 위한 round() 함수가 추가되었습니다. #include #include #include using namespace std; void main() { float float_num = 2.3; double double_num = 6.7; const ch.. 더보기
C++ string을 int로 변경하는 방법 프로그래밍을 하다 보면 다양한 타입들을 변환해야 하는 상황이 생깁니다. C++에서 int나 long 타입을 string으로 변환하는 것은 아래에서 확인 가능합니다. 2019/11/15 - [Programming/C&CPP] - C++ int를 string으로 변경하는 방법 C++ int를 string으로 변경하는 방법 C++의 string 클래스는 int나 float, double 같은 타입을 변환하는 메소드를 가지고 있지 않습니다. 다만 표준인 stringstream이나 boost의 lexical_cast를 활용해서 변환이 가능합니다. 아래 링크를 통해 int 등.. psychoria.tistory.com 반대로 string을 int로 변환하는 방법들을 소개합니다. 1. std::stringstream.. 더보기
[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 더보기
shared_ptr에서 배열(array) delete[]로 해제하는 방법 shared_ptr은 C++에서 제공하는 스마트 포인터입니다.메모리의 관리가 까다로운 C++에서 유용하게 사용이 가능합니다.shared_ptr은 참조 카운트(Reference Count)를 통해서 메모리 해제 시점을 결정합니다.shared_ptr은 기본적으로 사용된 메모리를 delete로 해제하게 됩니다.배열(new [])이 저장되어 있을 경우에 배열의 해제를 할 수 있는 방법은 다음과 같습니다.1. delete[]를 호출하는 함수 객체를 생성초기화를 할 때 포인터와 함께 메모리를 해제할 때 사용할 함수를 전달하는 방법입니다.shared_ptr은 생성자에 메모리 해제를 위한 deleter를 전달할 수 있습니다.메모리 할당을 위한 함수를 전달하는 것도 가능합니다.함수 객체 혹은 함수를 전달해서 shared.. 더보기
[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.. 더보기