본문 바로가기

c++

C++ 홀수/짝수(홀짝) 구분 방법 프로그래밍 언어에서 정수의 홀수/짝수 구분은 비교적 간단한 주제 중 하나입니다.간단한 주제이면서도 상당히 활용도가 높습니다.C++에서 간단하게 정수의 홀짝을 구분하는 방법은 다음과 같습니다. 1. % 연산자(Modulus operator) 먼저 % 연산자로 사칙연산 급으로 취급되는 가장 기본적인 연산자입니다.Modulus operator로 불리며 정수 나눗셈의 몫이 아닌 나머지 값을 리턴합니다.정수를 2로 나눴을 때 나머지가 0이기 때문에 이것을 기준으로 홀수/짝수 구분이 가능합니다. 2. & 연산자(Bitwise AND operator)비트 연산자 중 하나인 & 연산자를 사용하는 방법 역시 가능합니다.짝수 정수의 가장 우측에 있는 비트가 0인 점을 이용하는 방법입니다.정수와 1을 & 연산자로 연산하면 .. 더보기
C++ 스택을 사용한 괄호 짝 맞추기(Balanced brackets) 괄호 짝 맞추기(Balanced brackets)는 여는 괄호와 닫는 괄호의 짝이 맞는지 확인하는 문제입니다. 가장 나중에 열렸던 괄호 타입이 가장 먼저 닫혀야 됩니다. 이런 특성은 스택(Stack) 자료형을 활용하면 쉽게 구현이 가능합니다. 여는 괄호는 모두 스택에 넣고 닫는 괄호가 나올 때 스택의 최상단(Top)에 위치한 여는 괄호와 비교합니다. 그리고 닫는 괄호가 나왔을 때 스택이 비어 있으면 잘못된 짝으로 구성된 것입니다. 모든 문자를 비교한 이후에 스택이 깔끔하게 비었으면 완전한 괄호 짝이 맞는 문자열이 됩니다. 전체적인 코드는 다음과 같습니다. 30줄 남짓의 코드로 쉽게 구현이 가능합니다. 추가로 브라켓을 추가해야 하는 경우 map 타입의 pairs에 여는 괄호와 닫는 괄호 쌍을 입력해주면 됩.. 더보기
[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++ volatile 키워드 사용 C++ volatile 키워드는 다른 키워드에 비해서 잘 사용되지 않는 편입니다. 일반적으로 volatile 키워드는 해당 변수의 컴파일러 최적화를 제한하는 용도로 사용합니다. 컴파일러는 훌륭하게 최적화를 실행하지만 volatile을 사용해서 최적화를 제한해야 하는 상황이 있습니다. 1. 첫 번째 예제 먼저 다음과 같이 멀티스레드 환경의 경우입니다. #include #include #include int i; void Func1() { extern int i; int count = 0; i = 0; while (true) { if (1 == i) 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 더보기
Visual Studio C++ 프로젝트 빌드 속도 향상 Visual Studio로 C++ 프로젝트를 진행할 때 빌드에 시간이 많이 소요되는 경우가 있습니다.규모가 있는 프로젝트가 잘 정리되지 않은 경우 빈번하게 발생합니다.프로젝트 속성 변경을 통해서 C++ 프로젝트 빌드 속도를 개선하는 방법입니다. 1. 프로젝트 속성(Project Properties) 변경 방법프로젝트 속성은 단축키 Alt + F7로 실행하거나 메뉴의 PROJECT > Project's Properties로 실행 가능합니다.각 프로젝트 속성을 어디에 입력할지 모르는 경우 검색 방법은 다음과 같습니다.좌측의 C/C++과 Linker 등의 하위 메뉴에 All Options라는 메뉴가 존재합니다.상단에 보이는 검색창에 옵션을 입력하면 어디에 입력해야 되는지 표시가 됩니다. 2. 빌드 속도 최적화.. 더보기
Visual C++ 확장 문법 property C#에는 property라는 개념이 존재합니다. 일반적으로 클래스에 변수가 추가될 때 protected나 private로 숨깁니다. 그리고 getter, setter를 통해서 값을 변경하고 가져오는 방법을 사용합니다. C#에서는 간편하게 자동 구현 프로퍼티를 통해서 변수 자체에서 get, set 기능을 추가할 수 있습니다. Visual Studio의 C++은 확장을 통해서 property 기능을 제공합니다. 표준 C++ 구현이 아니기 때문에 다른 컴파일러에서는 컴파일되지 않습니다. 사용 방법은 다음과 같습니다. #include class Percentage { public: void putPercent(int nVal) { nValue = nVal; } int getPercent() { return nV.. 더보기