피씨컴의 기울어진 공관

'스터디/활동'에 해당되는 글 9건

  1. 2013.06.25 디자인 패턴 1일차
  2. 2013.06.25 인벤토리 알고리즘 프로세싱
  3. 2013.06.20 STL 기초 3일
  4. 2013.06.19 STL 2일차
  5. 2013.06.18 STL 기초 1일차
  6. 2013.06.07 디자인 패턴 종류
  7. 2013.03.19 3. 클래스 생성자와 파괴자
  8. 2013.03.19 2.인라인 메서드 & cerr
  9. 2013.03.14 1.클래스 정리

● 디자인 패턴 1일차

 

- GOF : 디자인 패턴 창시한 스터디 그룹

 

디자인 패턴은 실전의 경험등을 이론으로 승격화시킴 그래서 실용성이 높음

실전 -> 이론

 

디자인 패턴은 유지보수에 좋음

설계에 비용을 투자하여 유지보수의 비용을 대폭 줄임

 

디자인 패턴의 3종류 (더있음)

 

1. 생성 : 단일체(싱글턴), 팩토리

2. 행동 : 상태패턴, 전략패턴<- 현업뛰기전에 공부하면 좋음

3. 구조 : 퍼사드

 

 

디자인 패턴을 왜? 쓰나?

- 하나의 객체만 쓰기 위해

(전역이라는 상태를 추구해야함)

어디에 쓰나?

- 관리자, 매니저 급

 

뭐에 좋나?

- 객체가 더 필요해 졌을때 (싱글톤이 더이상 아니어야 할때) 그에 필요한 자기변화(구조변화)에 유연함

- 유일한 접근점에 브레이크 걸면 에러 났을때 좀더 편한 디버깅을 할수 있다.

 

'스터디 > 활동' 카테고리의 다른 글

인벤토리 알고리즘 프로세싱  (0) 2013.06.25
STL 기초 3일  (0) 2013.06.20
STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
Posted by 피씨컴

 

 

 

 

 

 

인벤토리에 좋은 구조

 

DB :  STL (MAP)

인벤토리 : STL(VECTOR)

 

 

 

 

 

 

 

'스터디 > 활동' 카테고리의 다른 글

디자인 패턴 1일차  (0) 2013.06.25
STL 기초 3일  (0) 2013.06.20
STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
Posted by 피씨컴

STL 기초 3일

스터디/활동 2013. 6. 20. 11:47

● MAP

- 검색이 빠름

 

↑ 시간 복잡도임

- 삽입 / 삭제 / 검색 로 구성

- 삽입이 3가지 방법이나 있음

1. 배열 인덱스로 삽입 = [] ex) A[key] = data  // 키 값이 잘못되도 무조건 삽입 키 중복이 없을때 삽입 없으면 수정

    // 이런 특성때문에 편리하지만 위험하여 그다지 추천하지 않음

 

2. pair 구조체 = pari < key, data> a.insert(pari) // 동일한 키값이 있음 삽입 안됨 수정도 안됨 아무것도 안함

// 그래서 안전성 좋음

3. A.insert(std::makepair(key,data); // 특징이 2번과 같음

 

- 삭제도 3가지 방법이나 이씅ㅁ

1. erase 함수를 통한 삭제

2. 반복자를 통한 삭제.

 

- 검색

- 해당 키 값의 반복자를 리턴

- 못찾으면 end()를 반환

 

 

● Multy Map

- 키 값 중복일때 써야함 (랭킹?)

- 중복키값에 의한 정렬을 할때 씀

- 검색에 쓰이지는 않음 검색하면 처음것만 반환 그래서 검색의 이점이 죽어버림

 

 

Unic -> 중복된 키값을 가진놈을 모두 날림 (기술커맨드 시스템 만들때 좋음

 

중복키값이기에 [ ] 이게 없음 그래서 삽입도 없음

 

 

 

● Set 잘안씀 꺼져

 

● bitset

- 데이터를 담는게 아님 참과 거짓만 담음

- 속도가 빠름

- 용량이 엄청나게 절약된다.

- bool과는 8배 이상 차이난다.

- tolong, tostring 으로 비트 내부를 확인 ex) tolong 비트를 long으로 변환해서 반환

 

 

● String

- find_of  : 내가 정한 문자 앞에서부터 찾아 넘겨줌

- find_last_of : 내가 정한 문자 뒤에서 부터 찾아 넘겨줌 못찾으면 -1값 나옴

- substr : 내가 해당 문자열에서 어디부터 짤라서 넘겨줌

'스터디 > 활동' 카테고리의 다른 글

디자인 패턴 1일차  (0) 2013.06.25
인벤토리 알고리즘 프로세싱  (0) 2013.06.25
STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
Posted by 피씨컴

STL 2일차

스터디/활동 2013. 6. 19. 09:20

● Vector , List

 

- 공통사항

begin() : 맨처음 원소를 가르키는 반복자

end : 맨마지막 원소의 다음위치 반복자

empty : 원소가 비었느냐?

size : 원소의 갯수 (Vec[5]같은 놈을 Vec.Size와 같이 사용 가능)

erase : 원소 제거 (반복자를 넣으면 그 해당 반복자를 제거)

 

 

● Vector 만의 특징

 

[] , at :임의 위치 지정

Push_back : 맨뒤 삽입 (이거밖에 없는 이유는 중간삽입은 부하가 심해서 뺀거임 반복자의 Insert를 쓰면 된다고도함)

pop_back

 

resize  : 공간과 원소를 확보(원소, 크기)

reserve : 공간만 확보( 크기)

※ resize reserve 모두 공간의 1.5배 확보한다.  10입력 11원소 15공간

 

Ex) Vector는 1.5배씩 늘어난다.

0 0

1 1

2 2

3 3

4 4

5 6

6 6

7 9

 

● List 만의 특징

push_front

pop_front

back : 맨뒤 원소

front

reverse : 앞뒤를 바꿈

Sort : 리스트 자료구조의 자료 단위는 노드라 뒤집어 봤자 제대로 적용이 안됨 그래서 전용 소트 함수가 따로 있는것

              구조상 일반 소트 알고리즘을 쓸수가 없어서 따로 지원

 

 

● 반복자 무효화 : 포인트는 아니지만 포인트역활을 해왔던 반복자가 그 역활을 못하는 상황

( 추가, 삭제에서 모두 발생하지만 평균적으로 삭제에서 더 많이 발생)

 

보통 원소의 처음부터 끝까지 한번에 지울때 많이 발생

 

Iter=vec.begin()

for(iter!=vec.end();iter++)

{

delete * iter;

iter = vec.erase(iter)    // 이부분 중요 이놈이 반복자를 지우고 다음놈을 리턴해주기 때문에 다음에 계속 이어할수 있음

}

 

 

● 벡터 좀 쉽게 쓰는법

std::vector < 자료형 변수명 >

:: iterator

 

이렇게 쓰면 졸 귀찮으니까

 

typedef     score_list     std::vector<tagscore>

 

요래 해두면 다음부턴 score_list만쓰면 만사오케이 ㅇㅇㅇㅇㅇㅇ

 

 

'스터디 > 활동' 카테고리의 다른 글

인벤토리 알고리즘 프로세싱  (0) 2013.06.25
STL 기초 3일  (0) 2013.06.20
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
3. 클래스 생성자와 파괴자  (0) 2013.03.19
Posted by 피씨컴

● STL(표준 템플릿 라이브러리)

 

라이브러리 : 어떤 데이터나 기능의 집합

 

 

1. 컨테이너 (그릇, 용기) : 자료구조 (스텍, 큐, 리스트) 자료들을 담는다.

2. 반복자 (컨테이너랑 세트) : 컨테이너의 각각의 원소의 포인터 역활을 하는 클래스

* . -> 전부 연산자 오버로딩을 해놈  // 포인터가 아닌데 원소의 포인터 역활을 함 그래서 반복자 무효화 연상이 발생할 수 있음

 

3. 알고리즘 - 어떤 문제를 해결하기위한 어떤 기능들을 하기위한 템플릿 모음

템플릿으로 되어 있어서 속도가 조금 빠르다(눈꼼만큼)

내부에서 에러가나면 참조하기 힘들다.

그냥 잘 안씀

 

4. 함수자 : 함수 / 클래스의 오퍼레이터를 가지고 함수처럼 쓰는거

일반함수는 전역화 하지만 이건 클래스 내부이기에 지역화가 가능 (모듈화를 시킨다는 이점)

메트리가 별로 없어서 그냥 함수 쓰고 맘 그래서 잘 안쓰나 스터지 주제로는 좋음

 

 

● 컨테이너의 종류

 

1. 시컨스 컨테이너 (순차) : 넣는식이 순차적으로 들어간다(위치, 시간에 연관이 없다)

     - Vector, list가 있음

 

 

2. 정렬 컨테이너

- map, set, Mmap, Mset 이 있음

-map : 자동정렬 (오름?내림차순? 설정가능) Key와 data의 페이단위(키는 문자, 정수, 가능 대소비교가 가능하다면 클래스도 가능)

(바이너리 트리 / 검색트리 / BST트리 : 끝에서 없음 없다 ) 검색에 특화 , 삽입삭제 빠름

- set : 키 자체가 데이터 (키값 중복은 mset이 가능)

 

임의 접근을 하고 유리한건 Vector와 []

 

3. 컨테이너 어뎁터 (스텍, 큐) : 자료를 넣는것보다 넣었다 빼는 것이 목적 (순회)

 

 

bitset 과 string은 반복자가 없음

bitset은 원소값이 1 비트인 것

 

 

 

● A++과 ++A 차이

 

- a++

1. 값을 더한다

2. 임시값을 만든다

3. 값을 반환

- ++a

1.값을 더한다

2.자기자신(값)을 반환한다

 

그래서 ++a가 더 빠르다.

 

 

● 반복자는 +정수 연산으로 노드이동 가능

 

맨처음 주소가

iter : 시작

end : 끝의 다음 원소가 나옴

for문을 쓰려면 i<end 처럼 쓰면 안됨  i !=end 가 되어야함

 

 

 

http://www.cplusplus.com/reference/vector/vector/

'스터디 > 활동' 카테고리의 다른 글

STL 기초 3일  (0) 2013.06.20
STL 2일차  (0) 2013.06.19
디자인 패턴 종류  (0) 2013.06.07
3. 클래스 생성자와 파괴자  (0) 2013.03.19
2.인라인 메서드 & cerr  (0) 2013.03.19
Posted by 피씨컴

턴 공부 하기 전에 알아야 하는 개념들


[1] 패턴의 분류

  1. 목적(purpose)에 따른 구분: 디자인 패턴은 목적에 따라서 '생성패턴', '구조패턴', 

   '행동패턴'으로 나눌 수 있다.

  1) 생성패턴(creation pattern): 객체의 생성과정에 관여하는 패턴

 

 

 

 

2) 구조 패턴(structral pattern): 클래스나 객체의 합성에 관한 패턴

 

 

 

 

3) 행동 패턴(behavioral pattern): 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 

     방법을 정의하는 패턴

 

 

 

 

 

- 위의 3개가 소프트웨어 패턴 책들에 나오는 디자인 패턴의 리스트 들이다 '초록색'으로 적힌

  패턴들은 gof 디자인 패턴에 나오는 패턴들이고 '주황색' 으로 적혀 있는 패턴들이 그 이외의
  책들에서 나오는 패턴들이다.

 

 

 

 

출처 : http://tadis.tistory.com

'스터디 > 활동' 카테고리의 다른 글

STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
3. 클래스 생성자와 파괴자  (0) 2013.03.19
2.인라인 메서드 & cerr  (0) 2013.03.19
1.클래스 정리  (0) 2013.03.14
Posted by 피씨컴

C++가 내세우는 목표 중의 하나는, 클래스 객체를표준 데이터형을 사용하듯이 사용할 수 있게 만드는 것이다.

그러나 일반 변수나 struct를 초기화 하는 것처럼 class 객체를 초기화 할 수는 없다.

이와 같은 방법으로 class를 초기화 할 수 없는 이유는 데이터들이 private 접근 제어를 가지고 있어 프로그램이 데이터 맴버에 직접 접근할 수 없기 대문이다. 접근할 수 있는 유일한 방법은 맴버함수를 이용하는 것 (데이터 맴버들을 private 대신에 public으로 만들면 방금 살펴본 위와 같은 방법으로 데이터 맴버들을 초기화 할 수는 있으나 그것은 데이터 은닉이라는 클래스의 기본원칙을 위반하는 것이다.

 

 

● 생성자

모든 객체는 그것을 생성할때 초기화 하는 것이 바람직 하다 이를 위해서 c++은 새로운 개로운 객체를 생성하고 그들의 데이터 맴버에 값을 대입해 주는 클래스생성자 (class constructor)라는 특별한 맴버함수를 제공한다. 

 

1. 객체를 선언할 때 프로그램이 자동으로 생성자를 호출한다는 것이다.

2. 생성자의 이름과 사용방법은 C++이 제공하고 사용자는 클래스 생성자의 정의만 제공한다

3. 생성자의 이름은 클래스의 이름과 같다.

4. 생성자는 리턴값이 없는데도 불구하고 void형으로 선언하지 않는다.

5. 생성자에는 데이터형을 선언하지 않는다.

 

다음은 이해를 위한 생성자 정의

 

stock::stock(const char * co, int n, double pr)

{

strncpy(company,co,29);

company[29]='\0';

shares = n;

share_val = pr;

set_tot();

}

 

 

 

● 생성자 사용하기

- 생성자의 명시적 호출

stock food = stock("world cabbage",250,1.25);

- 생성자의 암시적 호출

stock garment("furry mason", 50,2.5);

 

- new를 사용할 때 생성자 사용

stock * pstock = new stock("aaa",18,19.0);

stock 객체를 생성하고 전달인자를 통해 제공되는 값으로 그것을 초기화 한다 그러고 나서, 그 객체의 주소를 pstock 포인터에 대입한다.

이 경우에는 객체가 이름을 가지고 있지 않다. 그러나 그 포인터를 사용하여 객체를 다룰 수 있다.

 

 

 

● 디폴트 생성자

디폴트 생성자(default constructor)는 명시적인 초기화 값을 제공하지 않을 때 객체를 생성하는 데 사용하는 생성자이다. 즉 다음과 같은 선언에 사용되는 생성자이다.

 

stock stock1;    // 디폴트 생성자를 사용한다.

 

이 명령문이 동작하는 이유는, 사용자가 생성자를 제공하지 않아도 C++(컴파일러)가 자동으로 디폴트 생성자를 제공하기 때문이다. 그것은 생성자의 디폴트 버전인데 아무런 일도 하지 않는다. 예를 들자면 다음과 같다고 보면 된다.

 

stock::stock() { }

 

사용자가 클래스의 어떤 생성자를 일단 정의한 후에는 그 클래스의 디폴트 생성자를 제공하는 책임이 컴파일러로부터 사용자에게 넘어온다 사용자가 디폴트가 아닌 stock(const char * co, int n, double pr) 같은 생성자를 제공하면서 디폴트 생성자를 제공하지 않으면 다음과 같은 선언은 에러가 된다.  에러가 발생하는 이유는 ,초기화되지 않은 객체의 생성을 사용자가 원하지 않을지도 모르기 때문이다.

 

 

● 디폴트 생성자 사용하기

- 디폴트 생성자를 암시적으로 호출

stock first;

- 디폴트 생성자를 명시적으로 호출

stock first = stock();

- 디폴트 생성자를 암시적으로 호출

stock *prelief = new stock;

 

● 디폴트 생성자 사용에 있어 주의점

stock first()

다음은 first()가 stock객체를 리턴하는 함수임을 나타내는 것이다. 디폴트 생성자를 암시적으로 호출할 때에는 괄호를 사용하면 안되다.

 

 

● 파괴자

객체의 수명이 끝나는 시점에서 프로그램은 파괴자(destructor)라는 무서운 별칭을 가진 특별한 맴버 함수를 자동으로 호출한다.

 

1. 생성자와 마찬가지로 파괴자도 리턴값을 가질수 없고 선언된 데이터형을 갖지 않는다.

2. 파괴자는 전달인자를 가지면 안 된다.

3. 일반적으로 사용자가 코드에 명시적으로 파괴자를 호출하면 안된다.

4. 정적 기억 공간의 클래스 객체를 생성한다면, 프로그램이 종료될 때 파괴자가 자동으로 호출된다.

5. 자동 기억공간의 클래스 객체를 생성한다면 그 객체가 정의된 코드 블록을 프로그램이 벗어날 때 파괴자가 자동으로 호출된다.

6. new를 사용하여 객체를 생성한다면 그 객체는 힙 메모리 또는 자유 기억공간에 저장되므로 그것의 메모리를 해제하기 위해 delete를 사용할 때 파

    괴자가 자동으로 호출된다.

7. 프로그램은 어떤 작업들을 수행하기 위해 임시적인 객체를 생성할 수 있다 그러한 경우에 프로그램은 그 객체의 사용을 마쳤을 때 파괴자를 자동

    호출한다.

 

 

- 파괴자의 원형

~stock();

 

stock::~stock()

{

 

}

 

 

 

 

 

'스터디 > 활동' 카테고리의 다른 글

STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
2.인라인 메서드 & cerr  (0) 2013.03.19
1.클래스 정리  (0) 2013.03.14
Posted by 피씨컴

c++ 기초플러스 4판

 

 

● cerr

cerr 객체는 cout 과 마찬가지로 ostream객체이다. 둘 사이의 차이점은 운영 체제 리디렉션이 cout에는 작용하지만 cerr에는 작용하지 않는다는 것이다. cerr 객체는 에러 메시지를 위해 사용된다. 그러므로 프로그램 출력을 파일로 리디렉션할 때 에러가 발생하면, 화면에 에러 메시지가 나타난다.

 

 

● 인라인 메서드

- 클래스 선언안에 정의를 가지고 있는 모든 함수는 자동으로 인라인 함수가 된다.

- 원한다면 클래스 선언의 외부에 맴버 함수를 정의하고 그것을 인라인 함수로 만들 수 있다.  그렇게

   하려면 클래스 세부 구현 부분에서 그 함수를 정의할 때 inline이라는 제한자를 붙이면 된다.

  

- 인라인 함수들은 그들이 사용되는 각각의 파일에서 정의될 것을 요구한다. 즉 해당 클래스가 정의되

   어 있는 헤더 파일에 인라인 정의를 함께 넣으라는 소리.

 

- 코드 수정 규칙(rewrite rule)에 따르면, 클래스 선언 안에 메서드를 정의하는 것은 그 메서드 정의를

  원형으로 대체하고, 클래스 선언 바로 뒤에 그 메서드 정의를 인라인 함수로 다시 작성하는 것과 같

  다.

 

'스터디 > 활동' 카테고리의 다른 글

STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
3. 클래스 생성자와 파괴자  (0) 2013.03.19
1.클래스 정리  (0) 2013.03.14
Posted by 피씨컴

C++ 기초 플러스 4판

Stephen Prata 저

 

 

● OPP가 갖추고 있는 대표적인 기능

1. 추상화 (abstraction)

2. 캡슐화 (encapsulation)

3. 데이터 은닉 (data hiding)

4. 다형 (inheritance)

5. 상속 (inheritance)

6. 코드 재활용 (reusable code)

 

● 추상화

컴퓨터 분야에서 추상화란 정보를 사용자 인터페이스로 표현하는것이다. 즉 어떤 문제에 필수적인 조작적 기능들을 추상화하고 그것으로 해결책을 표현하는 것이다.

 

● 데이터형이란 무엇인가?

먼저 우리는 메모리에 저장되는 형태만으로 데이터형을 생각하기 쉽다. 예를 들어 char 1바이트 메모리를 나타내고 double을 8바이트 메모리를 나타낸다 그러나  좀더 깊이 생각해보면 데이터형이란 그

것을 대상으로 수행할 수 있는 연산에 의해 정의된다

 

- 기본형을 서술

1. 데이터 객체에 필요한 메모리의 크기를 결정한다.

2. 데이터 객체를 사용하여 수행할 수 있는 연산이나 메서드를 결정한다.

 

● 클래스

클래스(class)는 추상화를 사용자 정의 데이터형으로 변환해 주는 C++의 매개물이다.

클래스는 데이터 표현과 데이터를 조작하는 메서드들을 하나의 패키지 안에 결합 한다.

 

- 클래스 선언(class declaration) 

 데이터 맴버와 public 인터페이스, 맴버함수를 이용하여 데이터 표현을 서술한다.

 

- 클래스 메서드 정의 (class method definitions)

 클래스 맴버 함수가 어떻게 구현되는지를 서술한다.

 

※ 클래스 선언은 클래스의 개요를 제공하는것이고, 메서드 정의는 세부 사항을 제공하는 것

 

- C++의 키워드인 class

이 코드가 클래스 설계를 위한 정의라는 사실 나타낸다.

 

- 클래스 맴버 함수를 클래스 매서드(class method)라고 하기도 한다

- 맴버함수는 그자리에서 정의될 수도 있고, 클래스에 속해있는 다른 맴버 함수들 처럼 원형에 의해

   표현될 수도 있다.

- 원형에 의해 표현되는 맴버 함수들의 완전한 정의는 나중에 나온다.

- 함수 인터페이스를 서술하는 데에는 원형만으로도 충분하다.

- 데이터와 메서드를 하나로 결합하는 것이 클래스의 가장 두드러진 특징이다.

 

 

● 데이터 은닉 :  데이터를 클래스의 private부분에 넣는 것

private 같이 데이터에 직접 접근하지 못하게 차단하는 것을 데이터 은닉이라 한다.

- 장점

사업설명서와 같은 공시서류에서 데이터를 은닉하는것은 나쁘지만

- 장점

프로그래밍에서는 데이터의 무결성을 지켜주므로 좋은 것이다.

 

● 추상화 : public인터페이스는 설계의 추상화를 나타낸다.

 

● 캡슐화 : 세부적인 구현들을 따로 결합하여 추상화와 분리하는 것을 캡슐화라고 한다.

    데이터 은닉도 캡슐화의 한 예이다.

 

● public 또는 private?

- 일반적으로 데이터 항목들은 private부분에 선언된다.

- 클래스 인터페이스를 구성하는 맴버 함수들은 public부분에 선언 된다.

  그렇지 않으면, 프로그램에서 그 함수들을 호출할 수 없다.

- 클래스 선언에서 private 키워드는 없어도 된다. 그 이유는 클래스 객체에 대한 디폴트 접근 제

   어 로 지정되어 있기 때문이다.

 

 

●  클래스 맴버함수

- 맴버함수는 일반함수와 거의 같으며 함수 머리(function heading)와 함수몸체(function body)

   를 가지고 있으며 리턴형과 전달자도 가질 수 있다.

- 맴버 함수를 정의할 때, 그 맴버 함수가 어느 클래스에 속하는지 나타내기위해 사용 범위 결정

   연산자(::)를 사용해야 한다.

- 클래스 매서드는 그 클래스의 private 부분에만 접근할 수 있다.

 

 

 

 

 

'스터디 > 활동' 카테고리의 다른 글

STL 2일차  (0) 2013.06.19
STL 기초 1일차  (0) 2013.06.18
디자인 패턴 종류  (0) 2013.06.07
3. 클래스 생성자와 파괴자  (0) 2013.03.19
2.인라인 메서드 & cerr  (0) 2013.03.19
Posted by 피씨컴