728x90
반응형

Program Language 197

[C++] values

C에서의 Rvalue, Lvalue는 좌측 값은 대입(assignment) 시에 왼쪽 혹은 오른쪽에 오는 식(expression)이고, 우측 값은 대입 시에 오직 오른쪽에만 오는 식이다.라고 정의하고 있지만 C++에서는 다음과 같이 정의하고 있다. 좌측 값은 어떠한 메모리 위치를 가리키는데, & 연산자를 통해 그 위치를 참조할 수 있다. 우측 값은 좌측 값이 아닌 값들이다. C++11부터는 prvalue, xvalue, glvalue가 추가되었다. C++11에서는 이러한 value들을 다음과 같이 나누었다. lvalue : identity를 가지면서 move 될 수 없는 표현식 xvalue : identity를 가지면서 move 될 수 있는 표현식 prvalue : identity를 가지지 않고 있으면서..

[C++] std::move

template constexpr typename std::remove_reference::type&& move(T&& t) noexcept; std::move는 C++11에 도입된 개념으로 t가 가지고 있는 자원을 다른 객체에게 효율적으로 전달하는 것을 의미한다. std::move는 이동을 수행하지는 않는다. 이동될 수 있음을 알려주는 역할만 한다. std::move 된 객체를 함수에 전달한다면, 우측 값 레퍼런스를 인자로 받는 함수 (이동 생성자, 이동 대입 연산자, push_back 등)가 오버 로딩되어서 선택된다. 참고로 우측 값 레퍼런스 자체는 lvalue이기 대문에, 이동 생성자나 이동 대입 연산자 내부에서 std::move를 호출하는 경우가 많다. // 이동 생성자 A(A&& arg) : m..

[Python] wav 파일 읽어와서 출력하기

scipy, sounddevice 라이브러리 설치 파이썬 코드에서 소리를 다루기 위해서는 scipy, sounddevice이라는 라이브러리를 설치해야 한다. 아래와 같은 명령을 콘솔 창에 입력하면 설치가 가능하다. pip install scipy #사운드 파일을 읽어올 수 있다. pip install sounddevice # 소리를 출력할 수 있다. 만약에 pip 명령어를 찾을 수 없다면 install 시에 환경 변수를 등록하지 않았기 때문이다. python3.8의 경우는 아래와 같다. C:\Users\계정\AppData\Local\Programs\Python\Python38 C:\Users\계정\AppData\Local\Programs\Python\Python38\Scripts 환경 변수에 아래와 같은..

[C++] thread_local

thread_local은 thread가 TLS(Thread Local Storage)를 지원하기 위해서 C++11부터 추가되었다. 기존에 TLS변수를 선언하기 위해서는 __declspec(thread)를 사용해야만 했다. 하지만 정식으로 thread_local가 도입됨으로 간편하게 사용할 수 있게 되었다. TLS(Thread Local Storage) : thread 별로 고유한 저장공간을 가질 수 있는 방법이다. 각각의 thread는 고유한 Stack을 가지기 때문에 Stack 변수(지역 변수)는 thread별로 고유하다. 그래서 각각의 thread가 같은 함수를 실행한다고 해도 그 함수에서 정의된 지역 변수는 실제로 서로 다른 메모리 공간에 위치한다는 의미다. 그러나 정적 변수와 전역 변수의 경우에는..

[C++] recursive_mutex

std::mutex의 lock()의 경우 lock을 호출한 함수에서 unlock을 호출하지 않고 또다시 lock을 호출하면 알 수 없는 동작을 하게 된다고 한다. 예를 들면 아래와 같다. class buffer { list queue; std::mutex mut; public: bool empty() { std::lock_guard lock(mut); return queue.empty(); } // 생략 int pop() throw(out_of_range) { std::lock_guard lock(mut); while (empty()) { // 생략 } int tmp = queue.front(); queue.pop_front(); return tmp; } }; buffer 클래스에서 pop() 함수를 호..

[Python] 이미 읽고 출력하기

Pillow 라이브러리 설치 파이썬 코드에서 그래프를 그리기 위해서는 matplotlib이라는 라이브러리를 설치해야 한다. 아래와 같은 명령을 콘솔 창에 입력하면 설치가 가능하다. pip install Pillow 만약에 pip 명령어를 찾을 수 없다면 install 시에 환경 변수를 등록하지 않았기 때문이다. python3.8의 경우는 아래와 같다. C:\Users\계정\AppData\Local\Programs\Python\Python38 C:\Users\계정\AppData\Local\Programs\Python\Python38\Scripts 환경 변수에 아래와 같은 경로를 추가하면 된다. Python을 사용한 그림 읽어와서 출력하기 # 여러 색을 갖는 이미지 데이터 표현하기 # 외부 모듈 정의 imp..

[Python] 이미지 합하기

행렬에 값을 넣어서 값에 따라서 이미지를 선별하여 출력하여 두 이미지를 합칠 수 있다. # 행렬의 합을 이용해서 두 이미지를 결합하기 # 외부 모듈 선언 import turtle import numpy as np pixelSize = 10 turtle.speed(0) def putPixel(x, y, pSize, pCol): # 메인 소스 코드에서 호출하는 Pixel 채우기 함수 turtle.penup() # 좌표 이동을 위해 펜기능을 비활성화 turtle.goto(x*pSize,(-1)*y*pSize) # 주어진 좌표로 이동 turtle.pendown() # 펜기능을 다시 활성화 turtle.begin_fill() # 다각형을 그릴 때 내부를 채우기 turtle.fillcolor(pCol) # 다각형의..

[Python] turtle

Python에서 Turtle 모듈은 그리는 모습을 직접 볼 수 있어서 여러모로 유용하다. 하지만 가끔 여러 가지 세팅을 조절할 필요가 있는데 아래와 같이 사용할 수 있다. # 외부 모듈 선언 import turtle #turtle 모듈을 불러옴 import turtle as t #turtle 모듈을 불러오기 이름을 t로 from turtle import * # turtle 모듈을 불러오고 turtle은 생략함 # 아이콘 설절 turtle.shape('turtle') # 거북이 모양 turtle.shape('classic') # 화살표 모양 (기본) turtle.shape('triangle') # 삼각형 모양 turtle.shape('circle') # 원모양 # 그리기 turtle.forward(50) ..

[Python] 그림그리기

그림을 그리기 위해서는 turtle 모듈을 사용하면 편리하다. 그리고 이미지의 경우 2차원 배열을 많이 사용하므로 numpy 모듈로 함께 import 하자. import turtle import numpy as np 하나의 Point에 사각형을 그리는데, 일부분만 오렌지색으로 채워보는 예제를 살펴보자. #외부 모듈 선언 import turtle import numpy as np #데이터 myImg = np.array([[0, 0, 0, 0, 0, 0, 0, 0], \ [0, 1, 1, 1, 0, 0, 0, 0], \ [1, 1, 1, 1, 1, 0, 0, 0], \ [1, 1, 1, 1, 1, 0, 0, 0], \ [0, 1, 1, 1, 0, 0, 0, 0], \ [0, 0, 0, 0, 0, 0, 0, ..

[C++] result_of

지정된 인수 유형을 사용하는 호출 가능 형식의 반환 형식을 결정한다. template struct result_of; // Causes a static assert template struct result_of; // Helper type template using result_of_t = typename result_of::type; Fn : 쿼리할 호출 가능 형식 ArgTypes : 쿼리 할 호출 가능 형식에 대한 인수 목록의 형식 #include #include struct S { double operator()(char, int&); float operator()(int) { return 1.0; } }; template typename std::result_of::type f(T& t) { st..

[C++] condition_variable

thread를 수행할 때 때로는 다른 thread의 작업을 기다려야 할 때가 있다. 이때 condition_varialbe을 사용하면 thread를 block 할 수 있다. block 조건은 timeout을 설정할 수 도 다른 thread를 통해 설정할 수도 있다. condition_variable은 다음과 같은 method를 제공한다. notify_one : 해당 조건 변수를 기다리고 있는 thread 중 한 개의 thread를 깨운다. notify_all : 해당 조건 변수를 기다리고 있는 모든 thread를 깨운다. thread는 상기 method 이외에 timeout에 의해서 깨어날 수도 있다. #include #include #include using namespace std; mutex g_m..

[Python] CSV 파일 사용하기

csv 라이브러리 설치 파이썬 코드에서 그래프를 그리기 위해서는 csv이라는 라이브러리를 설치해야 한다. 아래와 같은 명령을 콘솔 창에 입력하면 설치가 가능하다. pip install csv 만약에 pip 명령어를 찾을 수 없다면 install 시에 환경 변수를 등록하지 않았기 때문이다. python3.8의 경우는 아래와 같다. C:\Users\계정\AppData\Local\Programs\Python\Python38 C:\Users\계정\AppData\Local\Programs\Python\Python38\Scripts 환경 변수에 아래와 같은 경로를 추가하면 된다. Python을 사용한 CSV 파일 읽어오기 import csv a = [[],[],[],[],[],[],[]] with open('pas..

[Python] 그래프 사용하기

matplotlib 라이브러리 설치 파이썬 코드에서 그래프를 그리기 위해서는 matplotlib이라는 라이브러리를 설치해야 한다. 아래와 같은 명령을 콘솔 창에 입력하면 설치가 가능하다. pip install matplotlib 만약에 pip 명령어를 찾을 수 없다면 install 시에 환경 변수를 등록하지 않았기 때문이다. python3.8의 경우는 아래와 같다. C:\Users\계정\AppData\Local\Programs\Python\Python38 C:\Users\계정\AppData\Local\Programs\Python\Python38\Scripts 환경 변수에 아래와 같은 경로를 추가하면 된다. Python을 사용한 그래프 그리기 a = [242, 256, 237, 223, 263, 81, 4..

[C++] noexcept

C++11부터 throw()가 더 이상 사용되지 않고, noexcept 키워드가 추가되었다. noexcept 키워드는 operator의 형태로, 그리고 specifier의 형태로 제공된다. noexcept() 한정자는 모든 면에서 throw() 보다 강력하고, Stnadard library들을 사용함에 있어, noexcept 한정자는 성능 상의 추가 이득을 제공하기도 한다. noexcept(expression) noexcept 연산자는 컴파일 타임에 해당 표현식이 예외를 던지지 않는 표현식인지 체크하여 표현식이 아래의 경우 중 하나라도 포함한다면 false를 그렇지 않다면 true를 반환한다. 상수 표현식이 아닌 함수가 noexcept 키워드를 가지지 않을 경우 런타임 체크가 필요한 dynamic_cas..

728x90
반응형