21 Jan 2019
|
C++
C++ DataType 출력하기
typeid 명령어 이용
리눅스에서 gcc 기반으로 실행했을 때 Windows에서 Visual Studio로 실행했을 때의 결과가 조금 다릅니다.
void test01() {
int a = 10;
double b = 10.0;
string c = "abc";
bool d = true;
cout << typeid(a).name() << ", " << typeid(b).name() << ", " << typeid(c).name() << ", " << typeid(d).name()
<< endl;
}
i, d, NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, b
std::is_same 명령어 이용
template<typename T>
std::string getType(T) {
std::string type = "unknown";
if (std::is_same<T, int>::value) type = "int";
if (std::is_same<T, double>::value) type = "double";
if (std::is_same<T, float>::value) type = "float";
if (std::is_same<T, bool>::value) type = "bool";
if (std::is_same<T, string>::value) type = "string";
return type;
}
void test02() {
int a = 10;
double b = 10.0;
string c = "abc";
bool d = true;
cout << getType(a) << ", " << getType(b) << ", " << getType(c) << ", " << getType(d) << endl;
}
int, double, string, bool
11 Jan 2019
|
C++
std::vector와 std::array
std::array는 C++11에서 새로 추가된 컨테이너로 예전부터 사용해오던 std::vector와 비슷하게 생각할 수 있지만 약간의 차이점이 있습니다.
둘의 차이는 다음과 같습니다.
차이점
| 항목 |
vector |
array |
| 방식 |
인덱스 기반이 아닌 순차 데이터 저장 컨테이너 |
인덱스 기반의 fixed-sized의 데이터 저장 컨테이너 |
| 동적 크기 변경 |
가능 |
고정. 컴파일 시점에 크기 정해짐 |
| 메모리 |
조금 더 많이 사용 |
조금 더 적게 사용 |
| 데이터 접근 시간 |
조금 더 오래 걸림 |
조금 더 적게 걸림 |
vector가 내부적으로는 인덱스 기반으로 이루어져 있지는 않지만, 인덱스를 별도로 구성해서 제공하기 때문에, 인덱스를 이용한 접근이 가능합니다. 그리고 고정 크기가 아닌 가변 크기이기 때문에 인덱스를 별도로 동적으로 생성하기 때문에 array 보다는 성능이 조금 더 안 좋습니다. (물론, 대부분의 경우에는 큰 차이가 나지는 않습니다.)
vector에서 특정 요소에 인덱스를 이용해서 접근할 때 [ ] 또는 at() 함수를 이용해서 접근할 수 있습니다.
데이터 접근시에는 항상 at() 함수를 이용하는 것이 좋습니다. 만약 인덱스 범위를 벗어날 경우 at() 함수는 out_of_range 예외를
발생시켜 예외 처리를 가능하게 하지만, [ ]는 오류 없이 지나가서 오동작을 발생시켜 디버깅이 더 어렵게 만듭니다.
04 Nov 2018
|
MAC OS
iTerm2 커스텀 설정
지극히 개인적인 설정입니다. iTerm2는 여기에서 받을 수 있습니다.
테마 설정
많은 종류의 테마가 있지만 저에게는 Oceanic-Next 테마가 가장 무난한 듯 싶습니다.
여기에서 다운로드한 다음 Finder에서 Oceanic-Next.itermcolors 파일을 실행하면
iTerm2의 색상 preset에 자동으로 추가됩니다.
맥북 터치바 버전에서는 터치바에 있는 칼라 원형 버튼을 누르면 테마를 선택할 수 있습니다.
만약 메뉴에서 선택하려면, Profiles > Colors > Color Presets에서 선택할 수 있습니다.
저는 전체 테마는 Oceanic Next를 선택하되, backgroud 색은 좀 더 어두운 색으로 설정합니다.
Preferences 설정
Apperance 메뉴로 들어가서 다음 항목들을 변경해줍니다.
Tabs의 Theme를 Dark로 변경
Windows의 Show line under title bar when tab bar is not visible 항목을 체크 해제
Profile 메뉴에서는 다음 항목을 변경합니다.
Text에서 Font를 Powerline으로 설정, 폰트 크기는 14
Window에서 Columns를 120으로(폰트 크기가 14일 경우는 100으로), Rows는 28로 세팅
Terminal에서 Unlimited Scrollback 체크
04 Nov 2018
|
리눅스
fzf 사용하기
Fuzzy Finder의 약어로, 터미널상에서 find 명령어를 대신할 수 있는 명령어입니다. 사용 방법이 쉬우며 아주 강력해서 많이 애용하고 있습니다.
설치 방법
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
설치한 다음 터미널에서 fzf를 입력해보면 어떤 프로그램인지 바로 알 수 있을 것입니다.
타 프로그램과 연동
fzf의 강력한 점은 단독 실행보다 타 프로그램과의 연동에서 발휘됩니다.
다음과 같이 fzf의 결과값을 받아서 다른 프로그램과 연동해서 사용할 수 있습니다.
vim $(fzf)
nano $(fzf)
vim $(fzf --height 60%)
vim $(fzf --height 30% --reverse)
# Default 옵션 설정도 가능합니다.
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
fzf의 Finder 내에서는 커서나 마우스로 파일을 선택하거나 스크롤을 할 수 있습니다.
여러 항목을 선택하고 싶은 경우에는 -m 옵션을 이용해서 실행하면 되며, Tab 및 Shift + Tab 키를 이용해서
여러 파일을 선택할 수 있습니다.
자동완성
fzf의 강점 중 자동완성 기능이 있는데, 아주 강력합니다. 사용법은 [명령어] [경로][패턴]**[TAB 키]이며, 사용 예제는 다음과 같습니다.
nano **<TAB>
vim **<TAB>
nano text**<TAB>
ls ./s**<TAB>
그 외에도
등과 같이 활용할 수도 있습니다.
preview 기능
fzf는 파일 내용을 미리 볼 수 있는 preview 기능을 제공합니다.
다음 함수를 .zshrc에 추가합시다. 터미널에서 fzfv를 입력하면 실행할 수 있습니다.
function fzfv()
{
fzf --preview '[[ $(file --mime {}) =~ binary ]] &&
echo {} is a binary file ||
(cat {}) 2> /dev/null | head -500'
}
04 Nov 2018
|
리눅스
IP 목적지별로 다른 route table 사용하는 방법
두 개(내부망/외부망)의 네트워크 인터페이스를 사용할 경우 다음과 같은 명령어를 이용해서 목적지 주소에 따라 routing을 다르게 할 수 있습니다.
# 설정: Destination IP Address가 10.XXX.XXX.XX 인 경우, en7 인터페이스 사용
sudo route -nv add -net 10 -interface en7
sudo route -nv add -net 112 -interface en7
# 삭제
sudo route delete -net 10 -interface en7