레필리아
'컴퓨터공학 기초/C.C++' 카테고리의 글 목록 (2 Page)

컴퓨터공학 기초/C.C++

컴퓨터공학 기초/C.C++

String tokenizer(문자열 split) class 구현 예시

stringTokenizer.cpp #include "stdafx.h" #include "StringTokenizer.h"stringTokenizer::stringTokenizer(const string& inputstring, const string& seperator) : _input(inputstring), _delimiter(seperator) { split(); }size_t stringTokenizer::countTokens() { return token.size(); }bool stringTokenizer::hasMoreTokens() { return index!=token.end(); }string stringTokenizer::nextToken() { if(index!= token.end..

컴퓨터공학 기초/C.C++

string split 함수 (stl vector)

간단한 코드라 설명 생략.

컴퓨터공학 기초/C.C++

virtual 응용(원리, 다중상속)

클래스의 멤버 함수는 실제로 어디에? 여지껏 멤버 변수와 멤버 함수는 모두 객체 내에 존재한다고 얘기해왔다.(그렇게 생각하고 프로그래밍 해도 상관은 없다.) 그러나, 우리는 실체를 알고는 있어야 한다. 멤버 변수는 각 객체 내에 존재하는게 맞지만, 멤버 함수는 아니다. 멤버 함수는 어짜피 같은 일을 하기때문에 각 객체 내에 두기엔 공간 낭비가 심하다.그래서 한곳에 멤버 함수를 두고, 각 객체가 그 함수를 복사해 쓰는 식으로 한다. ======================================================================================== 가상 함수가 동작하는 원리 가상 함수는 실제로는 그곳에 없는 함수라고 했는데, 그럼 대체 어떤 원리로 동작하는걸까? 가..

컴퓨터공학 기초/C.C++

String 관련 자작함수

stl에서 제공하는 string 클래스에는 다소 빠진 기능이 존재합니다. 가령, 문자열의 시작과 끝의 공백문자를 제공하는 Trim 류 함수나 문자열을 대문자 나 소문자로 변경해주는 함수들이 그것입니다. 기존의 자바의 String이나 MFC의 CString을 사용해본 사용자들은 이런기능이 없는것에 대해 아쉬움을 느끼게 되는데요. 다음은 이러한 부족한 기능들을 직접 구현한 논것 입니다. #include #include #include #include using namespace std; // 문자열의 오른쪽과 왼쪽 공백문자 제거 std::string Trim(const std::string& s) { if (s.length() == 0) return s; int f = s.find_first_not_of("..

컴퓨터공학 기초/C.C++

알고리즘 실습 모음 (링크)

copy, copy_backward http://beggu84.blog.me/90078094449 find_if http://beggu84.blog.me/90078095715 transform http://beggu84.blog.me/90078178019 replace_if, replace_copy_if http://beggu84.blog.me/90078179931 fill http://beggu84.blog.me/90078403587 generate http://beggu84.blog.me/90078404476 remove, remove_if http://beggu84.blog.me/90078494121 unique, unique_copy http://beggu84.blog.me/90078496943 ..

컴퓨터공학 기초/C.C++

STL - 결합 컨테이너

▣ 결합 컨테이너 (Associative Container) 혹은 연관 컨테이너 → 시퀀스 컨테이너와는 다른 기본 컨테이너의 발전형태 이것은 컨테이너의 값에 키(Key)라는 값을 결합하고 그 키 값을 이용하여 값 데이터를 찾을 수 있다. 결합 컨테이너도 시퀀스와 마찬가지로 원소 삽입이 가능하지만 여기서는 특정 위치에 대한 삽입이 허용되지 않는다. 그 이유는 정보 검색을 빠르게 하기 위해 결합 컨테이너에서 특별한 알고리즘을 사용하기 때문이다. → 결합 컨테이너는 set, multiset, map, multimap 이렇게 4개의 컨테이너를 가지고 있다. set과 multiset은 헤더에 정의되어 있고, map과 multimap은 헤더에 정의되어 있다. ★ set 컨테이너 → set은 결합 컨테이너 중에서 가..

컴퓨터공학 기초/C.C++

STL - copy()와 특별한 이터레이터

★ copy() → 하나의 컨테이너에서 특정 범위의 데이터를 다른 컨테이너로 복사하는 알고리즘 인수 1, 2 : [인수1, 인수2) 의 범위로 이터레이터를 인수로 넣음. (포인터도 가능) 인수 3 : 해당 이터레이터 지점부터 해서 데이터를 덮어씌운다. → 이 알고리즘의 주의사항은 인수 3에 넣어지는 지점에 삽입하는 것이 아니라 기존 데이터 위에 덮어 씌운다는 것이다. 또한 인수 3에 복사를 할때 자동으로 공간 할당을 해주지 않기 때문에 인수 1~2 범위 데이터를 넣을 수 있는 충분한 공간이 필요하다. 그렇지 않으면 할당 받지 않는 지점에 데이터를 덮어 씌우므로 런타임 에러를 유발하게 할 것이다. → copy() 는 다음과 같이 쓸 수 있다. vector test( 10 ); int iArray[10] =..

컴퓨터공학 기초/C.C++

STL - 시퀀스 컨테이너

★ 컨테이너의 종류 → 컨테이너는 deque, list, queue, priority_queue, stack, vector, map, multimap, set, multiset, bitset 이렇게 11가지 타입의 컨테이너형이 있다. ( 원래 추가적으로 더 존재하기는 하나 그것은 훗날 설명하고자 합니다. ) 타입으로 분류하면 위와 같이 되고, 개념적으로 분류하면 기본 컨테이너, 시퀀스 컨테이너(Sequence Container), 결합 컨테이너 (Associative Container)가 있다. ★ 기본 컨테이너 → 기본 컨테이너라는 개념에 대응하는 컨테이너 타입은 없다. 하지만 대부분의 컨테이너들은 이 기본 컨테이너의 요소를 가지고 있다. 즉 공통적 요소가 된다. → 기본 컨테이너는 다음과 같은 특성을..

컴퓨터공학 기초/C.C++

STL - 이터레이터(iterator)

★ 일반화 프로그래밍 → STL은 일반화 프로그래밍의 한가지 예이다. → 객체지향 프로그래밍이 프로그램의 데이터적인 측면을 중시하는 데에 비해 일반화 프로그래밍은 데이터 타입에 대해 무관하며 알고리즘을 중시한다. 이것은 즉 일반화 프로그래밍이라는 것이 어떠한 데이터 타입에서도 무난하게 돌아가야 한다는 것을 의미한다. ★ 이터레이터에 대해 → STL을 이해하기 위해서는 이터레이터의 이해가 반드시 필요하다. 배열, 리스트, 큐 등 다양한 종류의 컨테이너에 대해서 같은 연산으로 동일한 동작을 할 수 있도록 하는 것이 이터레이터이다. 예를 들어 ++연산을 예로 들어본다면 둘다 다음 요소를 가리키게 한다는 기능적인 측면에서는 같지만, 배열에서는 다음 주소 공간을 가리키게 하는데에 비해 리스트는 서로의 원소들이 (..

컴퓨터공학 기초/C.C++

STL - vector와 관련 함수

★ STL 종류 1. 컨테이너 → 배열과 같이 여러개의 값을 저장할 수 있는 구성단위. 동질적 같은 종류의 값을 저장할 수 있으며, 컨테이너도 vector, list, deque, map, queue ... 등등으로 종류가 다양하다. 2. 알고리즘 → 배열을 소트하거나 리스트에서 특정 값 검색과 같은 특별한 작업을 수행하기 위한 방법 3. 이터레이터 → 포인터의 일반화 버전. 이것은 포인터 같이 컨테이너 안에서 지시하는 위치를 옮기고 또 다른 원소를 가리키며, 이 것이 가리키는 객체 혹은 변수(이것을 원소라고 한다.)의 값을 갱신 혹은 삭제 등을 할 수 있게 하는 존재다. 4. 함수 객체 → 이것은 클래스 객체일 수도 있고 함수 포인터가 될 수도 있다. ★ STL은 배열, 큐, 리스트 같은 다양한 컨테이..