프로그래밍/c++
-
C++ STL replaceAll. string 공백/개행 등 패턴 문자 제거프로그래밍/c++ 2015. 6. 10. 11:39
C++ STL의 string을 이용해서 구현한 replace all 함수입니다. using namespace std; string replaceAll(const string &str, const string &pattern, const string &replace) { string result = str; string::size_type pos = 0; string::size_type offset = 0; while((pos = result.find(pattern, offset)) != string::npos) { result.replace(result.begin() + pos, result.begin() + pos + pattern.size(), replace); offset = pos + replac..
-
구글 C++ 스타일 가이드의 멤버 변수 네이밍 규칙을 따르지 않아야겠다고 생각한 이유프로그래밍/c++ 2015. 5. 23. 23:47
언젠가 본 구글 C++ 스타일 가이드에선 멤버 변수의 끝에 _를 붙이는걸 권하고, 헝가리안 표기법은 쓰지 않으며, 멤버 함수(메소드)는 파스칼 네이밍을 쓴다고 들었다. 난 그것이 객관적으로 옳은 쪽에 가깝다고 생각하여 익숙해지려고 그 이후의 모든 코딩에 해당 방식을 적용했지만 멤버 변수의 끝에 _를 붙이는 네이밍은 이러한 이유로 납득이 가지 않는다고 생각했다. 클래스 내부에서 m_을 쓰면 멤버 변수만이 쭈르륵 뽑힌다. 반면 멤버 변수 뒤에 _를 붙이는 방식은 그러한 것들을 보여주는 데에서 유리하지 않다. this를 사용하면 괜찮지 않느냐? 하지만 , 다음과 같이 멤버 함수와 멤버 변수가 함께 잡힌다 지금은 멤버 변수에 m_을 붙이는 형태로 바꿔서 그렇지 그렇지 않았다면 나열 순서도 뒤죽박죽 섞였겠지. C..
-
unsinged int와 size_t프로그래밍/c++ 2015. 3. 31. 14:55
http://en.cppreference.com/w/c/types/size_t size_t란? size_t는 부호 없는 정수형(unsinged integer)으로 sizeof, alignof, offsetof의 반환 값입니다. auto result = sizeof(very_very_big_object); 이론적으로 가능한 오브젝트의 최대 크기를 저장할 수 있는 타입이며 일반적으로, 배열 인덱싱 및 루프 계산에 사용됩니다. 이럴 때 쓴다! size_t는 이론적으로 가능한 오브젝트의 최대 크기라고 한다. malloc같은 C의 메모리 할당 함수를 보면 인자의 타입으로는 size_t를 사용하는데, int형, short형 같은 원초적 자료형들은 크기가 고정적이다. int는 4, short는 2로. 이런 고정적인 ..
-
배열의 최대 길이에 관하여프로그래밍/c++ 2015. 3. 31. 13:05
왜 하필 배열의 길이가 0x7fffffff 바이트를 초과할 수 없다고 했을까 더군다나 heap 메모리에 생성되는 것인데..? 현대의 운영체제는 메모리가 부족하면 하드디스크를 램으로도 사용한다고 들었다. 사실 배열의 최대 크기는 사실 ptrdiff_t과 관계가 있다. 31라인의 0x7fffffff은 현재 내 시스템에서의 ptrdiff_t에 오버플로우가 없이 저장이 가능한 최대의 값이다. ptrdiff_t은 포인터간의 거리를 저장하는데 쓰이는 타입으로, 부호 있는 정수형의 최대 값으로 재정의 되어있다. #ifdef _32비트_시스템_ typedef ptrdiff_t long; #elif _64비트_시스템_ typedef ptrdiff_t long long; .. 이런 식으로 여기서 그냥 int라고 하지 않는..
-
우측값 참조로 받은 값은 우측값일까?프로그래밍/c++ 2015. 3. 25. 17:12
우측값 참조로 받은 값은 우측값일까?나는 우측값을 처음 사용했을 때 우측값으로 받았으니 당연히 우측값이겠지! 라고 생각했었다. 마치 래퍼런스처럼 -_-;하지만 전혀 그렇지 않았다.왜 그럴까 자료를 찾아보던 중 이런 문구를 발견했다. "우측값 참조를 설계한 사람들은 우측값 참조라 정의한 것들도 좌측값, 우측값이 될 수 있다고 했다." 이 뭔 x소리야??란 생각이 들었는데, 상황은 다음과 같다 1234567c.push_back(std::string("Hello!")); // it's right value! void c::push_back(std::string&& str) // it's left value{ ...} 위 c.push_back(...)은 우측값이고, 아래의 c::push_back(... str)..
-
[c++14] shared_mutex와 shared_lock의 사용프로그래밍/c++ 2015. 3. 24. 12:52
c++14에서 추가된 shared_mutex와 shared_lock_guard는 리더즈-라이터 락(Readers-Writer Lock)이다.(리더즈 라이터 락?)컨테이너에 데이터를 추가할 땐 일반적인 lock_guard를 사용하고, 컨테이너에 있는 데이터를 사용하기만 할 때에는 shared_lock_guard를 사용한다. 사용 예를 보자 컨테이너에 데이터를 추가할 때 일반적인 lock_guard를 사용하는 모습이다.123456789 void add_thread(thread* thrd) { if(thrd) { boost::lock_guard guard(m); threads.push_back(thrd); } } 컨테이너를 순환하며 어떤 함수를 호출하는 과정에서는 shared_lock을 사용했다.1234567..
-