728x90

Programming Language 68

C++ STL list의 기본적인 사용법 정리

C++로 알고리즘 문제를 풀다 보면 STL을 자주 사용한다. 다양한 방식으로 자료를 다루는 스택, 큐, 링크드 리스트 등을 직접 구현하지 않아도 최적화된 환경에서 잘 이용해먹을 수 있게 해주는 도구로, 이번 포스트에서는 STL에서 list에 대해 간단하게 다뤄볼까 한다. 사실, 다룬다는 개념보다는 정리한다는 측면이 더 강할 것이다. list는 순차적인 컨테이너로, 메모리 할당은 연속적으로 이루어지지 않는다. vector와 비교했을 때, 랜덤 접근이나 탐색 측면에서는 vector가 더 좋은 성능을 보이지만, 특정 위치를 정해둔 상태에서 삽입이나 삭제가 이루어질 경우에는 vector에 비해 빠르다는 장점을 가지고 있다. 종합적으로 볼 때, list는 중간 데이터 삭제와 삽입이 자주 발생하면서, 순차적으로 저..

C++에서 문자열을 숫자로, 숫자를 문자열로

문자열 처리, 특히 숫자를 문자열로 다루어야 하는 문제들을 접하면 C언어를 주로 했던 사람들은 바로 떠올리는 게 atoi나 itoa다. 물론, 이를 몰라서 아스키 코드를 바탕으로 한 문자열 처리를 하겠지만(필자가 그랬다.), 어쨌든 이 두 함수를 알고 있는 사람들은 C++에서도 cstdlib.h 헤더 파일을 추가해주면 사용이 가능하다. 문자열을 숫자로 변환시켜주는 atoi는 표준 함수라서 크게 문제되진 않지만, 함수 자체가 가지고 있는 문제점이 있어서 더 좋은 대안이 있다면 사용에 주의를 기울여야 한다. 보통은 기본적인 수준의 문자열 처리 문제들을 푸는 상황에서는 문제가 없다. 문제는, 숫자를 문자열로 변환 시키는 itoa다. 표준이 아니라서 비표준 함수를 처리해주지 못하는 컴파일러를 만나면 컴파일 에러..

C++] 예외 및 예외 처리 기본

프로그램이 실행 중 오동작이나, 결과를 달리 하게 만드는 예상하지 못한 상황 발생을 예외(Exception)라고 하며, 이를 적절히 처리해주는 것을 예외 처리(Exception Handling)라고 한다. 대부분의 학교에서 처음 프로그래밍에 입문해서 코드를 짜기 시작하면, 기능적인 부분에 집중을 하고 책을 따라가기 때문에 이 예외에 대해서 고려할 일이 거의 없어서 이쪽 분야에 관심을 두지 않는 학생들을 졸업장을 받을 때까지 신경 쓰지 않는 경우도 간혹 있다. 만약 자신이 소프트웨어 분야에 관심이 많고, 그로 인해서 자신의 경험을 쌓고자 개인적인 프로젝트를 진행하거나, 학년이 올라 텀 프로젝트를 실시해서 그럴싸한 프로그램을 완성해야 하는 상황이 오게 되면, 예상하지 못한 곳에서 발생하는 문제들을 접하고 해..

C,C++] C++코드와 C 코드의 링크, Mangling 규칙

C언어는 다른 언어들에 비해(C++, Java 등) 역사가 길어 그동안 작성된 라이브러리, 소스가 많이 존재하며 이것들이 각기 다른 분야에서 활발히 사용되고 있다. 만일 C++ 프로그램을 개발할 때 기존에 작성된 C의 라이브러리, 소스를 사용하게 될 경우가 있는데 이때 C++ 프로그램에서 C 코드를 연결해 사용하는 방법을 알고 있다면 비교적 쉽게 다룰 수 있다. 서로 다른 언어를 연결하는 것은 쉬운 일은 아니지만, C++은 C의 내용들이 남아 있는 분들이 있어 상대적으로 쉬운 편이다. 모든 컴파일러가 목적 코드(obj)를 만들 때, 소스코드의 변수, 함수, 클래스 등의 이름을 변형해 저장한다. 이를Name Mangling(일부 책에서는 이를 이름 규칙이라고 하는데 표현이 애매해 사용하지 않겠다.)이라고 ..

C++] STL(Standard Template Library)이 무엇인가?

STL(Standard Template, Library;표준 템플릿 라이브러리)은 일반적인 대학생들은 접할 일이 거의 없다. 대학의 C++ 강의에서는 가르칠 수 없는 환경일 수밖에 없는 것이, C를 첫 프로그래밍 언어로 배우면서 반복문에서, 포인터에서 멘탈이 터지면서 흥미를 날린 상태로 어거지로 C++을 배우기 때문이라고 생각한다. 대학에서 사용하는 C++ 교재에서는 기본적으로 템플릿과 STL을 부록 형식으로라도 다루기 때문에 충분히 정보를 제공하고 있지만, C++에서 OOP(Object-Oriented Programming;객체 지향 프로그래밍) 개념을 다루는 것에만 초점을 두고 강의를 진행하는 경우가 많기 때문에 쳐다볼 일도 거의 없다. 덕분에(?) 대부분의 대학생들은 템플릿과 더불어 STL이라는 용..

C++] 명품 C++ 프로그래밍 9장 실습문제

개인적으로 C++을 공부할 때 작성해놓았던 코드들을 찾았다. 혼자 책을 사서 독학하던 시절에, 그리고 학부생 시절에 복습하면서 했던 문제들이라서 어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다. 확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다. 실습문제 1. #include #include using namespace std; class Converter { protected: double ratio; vi..

C++] 명품 C++ 프로그래밍 8장 실습문제

개인적으로 C++을 공부할 때 작성해놓았던 코드들을 찾았다. 혼자 책을 사서 독학하던 시절에, 그리고 학부생 시절에 복습하면서 했던 문제들이라서 어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다. 확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다. 실습문제 1. #include #include using namespace std; class Circle { int radius; public: Circle(int..

C++] 명품 C++ 프로그래밍 7장 실습문제

개인적으로 C++을 공부할 때 작성해놓았던 코드들을 찾았다.혼자 책을 사서 독학하던 시절에, 그리고 학부생 시절에 복습하면서 했던 문제들이라서어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다. 실습문제 1. #include #include using namespace std; class Book { string title; int price, pages; pub..

C++] 명품 C++ 프로그래밍 6장 실습문제

개인적으로 C++을 공부할 때 작성해놓았던 코드들을 찾았다.혼자 책을 사서 독학하던 시절에, 그리고 학부생 시절에 복습하면서 했던 문제들이라서어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 실습문제 1. add() 함수를 호출하는 main() 함수는 다음과 같다. add() 함수를 중복 작성하고, 프로그램을 완성하라. 디폴트 매개 변수를 가진 하나의 add() 함수를 작성하고 프로그램을 완성하라. #include using namespace std; /* 1 */ /* int add(int* arr1, int size) {..

C++] 명품 C++ 프로그래밍 5장 실습문제

개인적으로 C++을 공부할 때 작성해놓았던 코드들을 찾았다.혼자 책을 사서 독학하던 시절에, 그리고 학부생 시절에 복습하면서 했던 문제들이라서어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다. 실습문제 1. 두 개의 Circle 객체를 교환하는 swap() 함수를 '참조에 의한 호출'이 되도록 작성하고 호출하는 프로그램을 작성하라. #include using namespace std; void swap(int& a, int& b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int..

728x90