목록c++ (19)
살아가는 이야기
C++에서 UTF-8 문자열이 지원된다는 얘기는 들었지만, 실제로 사용 가능한지는 확인하지 못했었다. 갑자기 궁금하여 사용해 보니 잘 되는 것을 볼 수 있었다. 다만 리터럴 앞에 u8 접두사만 붙여 주면 된다. 아주 간단한 예를 보면 다음과 같다. #include using namespace std; int main() { const char u8s[] = u8"안녕?"; cout
2021년 추석 기념으로 프로그래밍 언어 인기도를 게시한다. 한동안 저장하지 못했던 프로그래밍 언어 인기도를 올해는 생각이 나서 측정해 보았다. 최근 게시글과 마찬가지로 TIOBE 인덱스(https://www.tiobe.com/tiobe-index/) 기준이다. 작년에 비해 조금 낮아지긴 했지만 아직 C가 부동의 1위이다. Fortran과 Delphi, Visual Basic의 약진이 놀랍다. 이후 50개의 인기 언어는 다음과 같다. 상위 10위 표에 작년 순위가 함께 게시되어 있어서 다행이라고 생각했었는데, 장기간 순위가 별도로 나와 있었다. 그래서 그것도 함께 게시한다. 장기간 순위를 보면 C/C++와 Java의 영향력이 독보적이다. 아직 대세는 C 언어 그룹임을 알 수 있다. 배우기 쉬운 BASIC..
표준입력(stdin)에서 행 단위로 읽으려면 fgets를 사용한다. 과거 사용하던 gets는 버퍼 넘침(buffer overflow) 문제로 인해 더 이상 사용하지 않는다. fgets의 인수는 fgets(버퍼, 크기, 스트림) 형식으로 사용하는데, 우리말 순서로는 인수 순서가 잘 이해되지 않지만 영어 순서로는 "get a string into 버퍼 with 크기 from 스트림"으로 읽을 수 있으므로 뜻이 통한다. 헷갈리는 것은 버퍼와 스트림 순서인데, strcpy(버퍼, 소스)의 순서처럼 우측 끝 인수가 소스(source)라고 생각하면 기억하기 쉽다. #include int main() { char line[BUFSIZ]; int sz = sizeof line, lineno = 0; while (fge..
Python의 문자열 함수 중에는 strip()이라는 메소드가 있다. 이 메소드는 문자열의 좌우 공백을 제거한 결과를 반환한다. 좌측만 제거하려면 lstrip(), 우측만 제거하려면 rstrip()을 사용한다. 사용법은 다음과 같다. >>> s = ' rock, paper, scissors ' >>> s.lstrip() 'rock, paper, scissors ' >>> s.rstrip() ' rock, paper, scissors' >>> s.strip() 'rock, paper, scissors' >>> s ' rock, paper, scissors ' 그런데 이와 유사한 함수를 C++에서 사용하고 싶으면 어떻게 할까? Boost 라이브러리에 유사 함수가 있다. #include std::string ..
C++11에 자료구조에 대한 for 루프가 추가되었다[C++11에서는 구간 for 문(range-for statement)이라고 부름]. 예전에 스크립트 언어에 있던 것이 Java 1.5에 추가되더니만, 급기야 C++11까지 전파되었다. 사용하기 매우 편하니 알아두는 것이 좋겠다. 샘플코드는 다음과 같다. #include #include #include #include using namespace std; int main() { int ns[] = {1, 3, 5, 7, 9}, size = sizeof ns / sizeof *ns; ostream_iterator outport(cout, " "); copy(ns, ns+size, outport); cout
C++에서 스트림 입력 연산자 >>나 출력 연산자
프로그래머는 웹에서 여러 좋은 정보를 얻을 수 있다. C++ 프로그래머도 마찬가지인데, 최근에 알게 된 C++ 참고 사이트다. http://www.java2s.com/Tutorial/Cpp/CatalogCpp.htm C++ 언어 자체에 대한 소개도 있으므로 초보자도 이용할 수 있다. 영어로 되어 있다는 것이 흠이지만, 샘플코드와 실행 결과가 잘 정리되어 있어서 영어를 잘 몰라도 이용하는 데에는 별 지장이 없다.
Gnu 컴파일러 g++를 사용하다가 다음과 같은 템플릿 오류가 발생하였다. stack.cpp:19:1: error: 'Stack::Stack' names the constructor, not the type stack.cpp:19:1: error: and 'Stack' has no template constructors stack.cpp:22:1: error: expected unqualified-id before 'template' 이상하게도 Microsoft Visual Studio에서는 문제없이 컴파일되는데, g++에서는 오류 메시지가 나왔다. 오류의 원인은 템플릿 생성자 이름 때문이었는데, 수정하기 전 소스의 일부는 다음과 같다. template Stack::Stack(int size) : _to..