반응형

SW/C++ 87

C++ : STL : find 알고리즘 구현 : 예제

#include "Algorithm.h" namespace samples { namespace Alogorithm { template Input* Algorithm::Find(Input* first, Input* last, const T& value) { while (first != last) { if (*first == value) { return first; } ++first; } return last; } } } 자료형이 2개 들어오며, 처음과 끝, 찾을 값을 파라미터로 받습니다. 반복문을 통해, 값이 같을 떄까지 반복합니다. 찾는다면 현재의 위치 포인터를 반환합니다. 만약 같은 값이 없다면, 마지막 위치 포인터를 반환합니다. #include #include #include "Algorithm.h"..

SW/C++ 2020.04.01

C++ : STL 알고리즘 : 종류, 예제, copy() 사용 방법

STL 알고리듬 요소 범위에서 쓸 수 있는 함수들을 의미합니다. 배열 또는 STL 컨테이너에 사용할 수 있습니다. 반복자를 통해 컨테이너에 접근합니다. 컨테이너의 크기를 변경하지는 않습니다. 추가 메모리 할당도 없습니다. 변경 불가 순차 연산 : find, for_each(), ... 변경 가능 순차 연산 : copy(), swap(), ... 정렬 관련 연산 : sort(), merge(), ... 범용 수치 연산 : accumulate() ... copy() 예제 #include #include #include using namespace std; int main() { vector scores; scores.push_back(10); scores.push_back(50); scores.push_ba..

SW/C++ 2020.03.31

C++ : condition_variable::wait() : 사용법, 주의사항, 예제, 활용 방법

std::condition_variable::wait 현재 쓰레드 뮤텍스의 잠금을 풀고 notifu_one() 또는 notify_all()을 기다립니다. 깨어나면, 뮤텍스를 다시 잠급니다. 다시말해, notify_xxx가 wait()보다 먼저 호출되면, 해당 쓰레드는 풀리지 않고, 영원히 기다리게 됩니다. #include #include #include static std::mutex sQueueLock; static std::condition_variable sEvent; static std::queue sQueue; void Consume() { while (true) { int val; { std::unique_lock lock(sQueueLock); sEvent.wait(lock); val = s..

SW/C++ 2020.03.30

C++ : condition_variable, unique_lock : 개념, 정의, 활용 방법

std::condition_variable 이벤트 개체라고 합니다. 신호를 받을 떄까지 현재 쓰레드의 실행을 멈춥니다. notify_one(), notify_all() 를 사용해 멈춰 놓은 쓰레드 또는 전부를 다시 실행시킵니다. wait(), wait_for(), wait_until() 를 사용해 조건 변수의 조건을 충족시킬 때까지 또는 일정 시간 동안 현재 쓰레드의 실행을 멈춥니다. 이 떄 std::unique_lock을 사용해야 합니다. std::unique_lock 기본적으로 scoped_lock과 유사합니다. 생성시에 lock을 잠그지 않을 수도 있습니다. 두번째 매개변수로 std::defer_lock을 전달해야 합니다. std::recursive_mutex와 함께 써서 재귀적으로 잠글 수 있습니..

SW/C++ 2020.03.29

C++ : thread : detach, joinable : 사용법, 예제, 개념

std::thread::detach() 쓰레드 개체에서 쓰레드를 떼어 냅니다. 떼어진 쓰레드는 메인 쓰레드와 무관하게 독립적으로 실행됩니다. std::thread::joinable() 쓰레드가 실행 중인 활성 쓰레드인지 아닌지 확인합니다. 예제 #include #include #include #include using namespace std; void PrintMessage(const std::string& message, int count) { for (int i = 0; i < count; ++i){ std::cout

SW/C++ 2020.03.17

C++ : STL : 목적, 문제점, 대체 방법

SLT 컨테이너의 목적 모든 컨테이너에 적용되는 표준 인터페이스가 존재합니다. std 알고리듬은 많은 컨테이너에서 작동합니다. 템플릿 프로그래밍 기반이며, 메모리를 자동 관리해줍니다. 인터페이스 문제점 모든 컨테이너에 같은 인터페이스가 적용되는 것은 이상하다고 할 수 있습니다. 극단적으로 개체 지향 프로그래밍을 추구한 사례라고도 할 수 있습니다. 메모리 단편화 빈번한 메모리 재할당은 메모리 단편화를 초래할 수 있습니다. 메모리 단편화는 엄청난 문제가 될 수 있습니다. 특히 가상 메모리를 지원하지 않는 플랫폼에서 프로그램을 실행할 때, 문제가 야기될 수 있습니다. 결국, 메모리 단편화 때문에 애플리케이션이 죽을 수 있습니다. 즉, 총 여유 공간은 충분하나 충분히 큰 연속되는 메모리가 없는 경우에 일어날 수..

SW/C++ 2020.03.15

C++11 : Threading 라이브러리 ( 쓰레드 구현, 사용 방법 )

Thread 지원 라이브러리 C++에서의 쓰레딩 라이브러리 사용법에 초점을 맞추어 포스팅을 진행합니다. 특히, 쓰레드, 뮤텍스, 조건 변수 등을 활용해보도록 하겠습니다. std::thread c++11 이전의 멀티쓰레딩을 구현하기 위해서는 윈도우 쓰레드, POSIX 쓰레드를 사용했습니다. 그래서 OS 마다 구현을 달리해야만 했고, 불편함이 존재하였습니다. 결국, C++11 전까지는 표준 멀티 쓰레딩 라이브러리가 없었습니다. 리눅스와 유닉스 계열에서는 POSIX 쓰레드를 활용하였습니다. 윈도우는 따로 윈도우 쓰레드를 사용하였습니다. #include #include #include using namespace std; void PrintMessage(const string& message) { cout

SW/C++ 2019.12.23

c++ : istreambuf_iterator와 istream_iterator의 차이점

istream_iterator 와 istreambuf_iteratorstd::istream_iterator는 형식화된 추출을 위한 반복자입니다. 예를 들어, 파일 안 내용에 정수가 있고 컨테이너에 복사하려면 std::istream_iterator를 사용하면 int에서 추출한 값을 내부적으로 컨테이너에 복사합니다. (연산자 >>() 사용) std::copy(std::istream_iterator(file), std::istream_iterator(), std::back_inserter (some_container)); std::istreambuf_iterator는 형식화되지 않은 추출을 위한 반복자입니다. 생성자를 통해 제공된 std::streambuf 객체에서 직접 작동합니다. 따라서 파일 형식에 대해 ..

SW/C++ 2019.08.23

C++ : 프로그래머스 : 가운데 글자 가져오기 : 풀이

풀이#include #include using namespace std; string solution(string s) { string answer = ""; int size = s.size(); if( size % 2 == 1 ){ answer = s[ size / 2 ]; } else { answer = s[ size / 2- 1]; answer += s[ size / 2 ]; } return answer;} 실행 결과정확성 테스트테스트 1 〉통과 (0.01ms, 3.79MB)테스트 2 〉통과 (0.01ms, 3.78MB)테스트 3 〉통과 (0.00ms, 3.91MB)테스트 4 〉통과 (0.00ms, 3.75MB)테스트 5 〉통과 (0.00ms, 3.79MB)테스트 6 〉통과 (0.01ms, 3.79..

SW/C++ 2019.05.30

C++ : 비전과 장점, 커리어 고민

평생 매니지드 언어(자바, 파이썬, 코틀린, C# 등..)만 사용할 것인가? 다음을 알기 위해 여전히 언매니지드 언어를 배워야 합니다.- 메모리 동작원리- CPU 동작원리- 컴퓨터처럼 생각하는 방법- 매니지드 언어에서 지원하는 모든 바법같은 기능들의 동작원리 고급 프로그래머로 살아남기 위해서는 내 프로그램이 돌고 있는 하드웨어를 이해해야만 합니다. 컴퓨터공학을 공부하다보면 이걸 왜 배워야하지라고 생각을 하는 내용들이 바로 이러한 것들이 아닌가 싶습니다. 요즘 IT 학원에서는 기본적인 프로그래밍만 가르치고 프로그래머를 양산하는 추세입니다. 따라서 매니지드 언어를 공부하면서 컴퓨터처럼 생각하는 습관을 들인다면, 그러지 못한 사람들보다 빠르게 성장할 것입니다. 향후 10년 커리어에 대한 고민여전히 프로그래머로..

SW/C++ 2019.05.29

C++ : 비전, 사용 관련 업계에 대해

C++은 여전히 활발하게 쓰이는가?모든 것을 C/C++로 코딩되어 왔습니다. 하지만 객체 개념과 Java가 등장하면서 순위가 바뀌었습니다. 많은 C/C++ 프로젝트들이 Java로 대체되었습니다. 사람들은 C/C++이 코볼처럼 죽을 것이라고 이야기하였습니다. 성능이 필요한 곳에서는 여전히 Java 보다 C/C++가 많이 사용되고 있습니다. Java 등의 매니지드 언어는 완전히 C/C++을 대체할 수 가 없습니다. 요즘 나오는 파이썬, C#, 코틀린 등의 매니지드 언어는 현재 Java와 경쟁하고 있습니다. C/C++은 언매니지드 언어이고, 이를 대체할만한 경쟁 언어가 없다고 할 수 있습니다. 누가 C/C++을 사용하고 있는가?기본적으로 C/C++은 언매니지드 언어에 특징에 따라 운영체제에서 많이 활용됩니다...

SW/C++ 2019.05.29

C++11 : 추상화와 캡슐화, 생성자와 소멸자 (개념 및 예제)

C++를 필두로 하는 객체지향 프로그래밍의 중요한 개념인 추상화와 캡슐화에 대해 살펴보겠습니다. 추상화와 캡슐화는C++를 비롯한 객체지향 프로그래밍 언어에 공통으로 나타나는 특징입니다. 따라서 특별한 문법을 암기하는 것이 아니라 개념을 이해하고 이를 코드에 적용하는 훈련이 필요합니다. 추상화추상화란 사물을 사실적으로 표현하는 개념이 아니라 불필요한 부분을 제거하고 공통된 특징만 추출하여 간결하고 이해하기 쉽게 만드는 작업을 의미합니다. 추상화는 객체지향 언어의 주요 특징 중에서도 첫 번째로 꼽습니다. 그 이유는 클래스를 만드는 과정과 밀접한 관계가 있기 때문입니다. 즉 표현하려는 실생활에 대한 공통적인 특징을 속성과 기능으로 구분하고 각각 멤버 변수와 멤버 함수로 만들어서 클래스로 표현하는 과정을 추상화..

SW/C++ 2019.01.06

C++11 : 멤버 함수 선언과 정의 분리에 대해 알아볼까요? (개념 및 예제)

클래스의 멤버 변수는 클래스 내부에 선언한 변수이며, 클래스의 멤버 함수는 클래스 내부에 선언한 함수입니다. 객체를 생성하면 클래스의 멤버 변수는 객체의 속성이 되고, 클래스 멤버 함수는 객체의 기능이 됩니다. 이를 통해서 추상화를 구현할 수 있습니다. C에서 선언문은 보통 헤더 파일에 작성하고, 정의는 소스 파일에 작성해보았던 경험이 있을 것입니다. 마찬가지로 C++ 에서도 보통 헤더 파일에 클래스 멤버 변수와 함수를 선언하고, 소스 파일에 멤버 함수를 정의하는 방식을 따릅니다. #include using namespace std;#define NAME_LEN 20#define SEX_LEN 10#define JOB_LEN 20#define CHARACTER_LEN 20class Chulsoo { pr..

SW/C++ 2019.01.05

C++11 : 클래스와 객체에 대해 알아볼까요? (개념 및 예제)

클래스가 왜 필요할까요? 컴파일러가 int형의 모든 속성과 연산 기능에 대해 이미 정의했으므로 컴파일러가 알아서 프로그램을 수행합니다. 하지만 1실생활의 여러 상황을 프로그래밍하려면 int와 같은 기본 자료형으로는 표현에 한계가 있습니다. 이러한 한계를 극복하려면 앞서 배운 C++ 구조체처럼 사용자가 직접 정의할 수 있는 자료형이 필요합니다. 실생활의 상황을 표현하는 자료형을 사용하는 것은 추상화라는 개념의 출발이라 할 수 있습니다. 추상화란 실생활에서 객체의 속성과 기능을 표현하는 개념이라고 양지해주세요. C++ 클래스 역시 실생활의 상황을 추상화할 수 있는 사용자 정의 자료형인 것입니다. C++ 클래스와 객체 개념 바로 알기이전에 포스팅하고 다루어 보았던 구조체 예제를 클래스로 바꾸어 보겠습니다. #..

SW/C++ 2019.01.04
반응형