달력

11

« 2018/11 »

  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
2010.04.19 00:28

함수객체 프로그래밍/STL2010.04.19 00:28






요즘엔 이래저래 혼란이라 포스팅을 안하고 있었으나--a

개념파악은 다 한거 같고,

책 찾아 보기 귀찮은 것들만 빠르게 포스팅 하고,

API로 넘어가야 할것 같다.

새벽2 시쯤엔 잘 수 있겠지 머 -_ -;;

잡소린 그만하고,

함수 객체를 사용하는 방법은 여러가지고 존재한다.

1. 전역 함수
2. 클래스 내의 맴버 함수
3. 글래스의 연산자 오버로딩 사용

예제
1. 전역 함수


2. 클래스 내의 맴버 함수

2.2 클래스 내의 인자를 추가적으로 받는 맴버 함수

3. 클래스 내의 연산자 오버로딩


이 부분에 대해서 모호할 수 있는데,
AAA를 임시 객체로 생성하고 ()를 호출,
당연히 ()에 들어 가는 값은 vector의 값이고(이 예제에서는 int형)
for_each의 모든 동작이 끝나면 AAA() 임시 객체를 return,
AAA a가 그 값을 복사 생성자로 받게 된다는 것을 결과를 통해 알 수 있다.

3.2 클래스내에 존재하는 연산자 오버로딩
비슷 하지만 조금 다른 경우도 있다.

이 결과를 보면 복사생성자를 무려 15번이나 들린다는 것을 알 수 있다.
하지만 이것은 coll에 임시객체를 생성해서 값을 저장하고 있는 것이기 때문에 들르는 것이고,
왜 그 횟수가 15번인지까지는 솔직히 잘 모르겠다.
push_back를 한번만 하면 1번 밖에 안들르고,
2번째에 2번 더 들리고,
3번째에 6번 들리게 되던데,,,, 흐음..
어째뜬 그것만 제외한다면, 이전과 비슷하지만,
단지 vector가 가지는 값이 int가 아니라 AAA클래스 객체 라는 것만 빼면,
크게 차이점은 없다.
상황에 따라서 AAA 객체를 vector에 저장해야 하는 상황에서,
operator()를 int가 아닌 AAA& 로 받고 있다는 것을 주의해서 보아야 할 것이다.



함수 객체라는 기능이 매우 뛰어나다고 생각하지만,
잘 쓰지 못한다면 오히려 그것은 독이 될 수 있다고 생각한다.
아직 많이 부족하지만 당분간은 함수 객체를 어떻게 해서든 자주 사용해가는 방향으로 코딩을 해볼까 한다.
물론 operator연산도 마찬가지로,,,,

'프로그래밍 > STL' 카테고리의 다른 글

함수객체  (0) 2010.04.19
algorithm  (0) 2010.04.08
연관 컨테이너 - Set, Map, multiSet, multiMap  (0) 2010.04.08
iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
Posted by 안식의후크
2010.04.08 19:26

algorithm 프로그래밍/STL2010.04.08 19:26







algorithm 해더를 추가하면 신기한 함수들을 사용이 가능한데,
이들은 STL의 컨테이너들을 대상으로 원하는 값을 검사 수행 하는 일들을한다.

간략하게 예제를 살펴 보자.

'프로그래밍 > STL' 카테고리의 다른 글

함수객체  (0) 2010.04.19
algorithm  (0) 2010.04.08
연관 컨테이너 - Set, Map, multiSet, multiMap  (0) 2010.04.08
iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
Posted by 안식의후크





시퀀스 컨테이너와 비슷하지만 다른 연관 컨테이너는 set과 map이 존재한다.

일단 모두다 트리구조로 이루어져 있고

map은 pair형태를 띄고 있으며, multi가 아닌 연관 컨테이너는 중복된 값을 허용하지 않는 다는 특징이 있다.

Set 예제

map 예제

소스 코드만 봐도 충분히 이해가 가능하지만,
map에 대해서는 [] 사용이 가능하다.
insert를 사용하는것이 일반적이지만,
특이한 점은,
insert를 사용해서 "test", 123을 넣었다면,
coll2["test"] = 123; 과 같은 의미라는것이다.
즉, 앞에 들어가는 값은 그것의 타입에 신경 쓰지 않고,
coll2["test"] 식으로 파악을 하게 된다는 것에 대해서 신기할 뿐
특별히 문제가 되는것은 없다.

'프로그래밍 > STL' 카테고리의 다른 글

함수객체  (0) 2010.04.19
algorithm  (0) 2010.04.08
연관 컨테이너 - Set, Map, multiSet, multiMap  (0) 2010.04.08
iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
Posted by 안식의후크
2010.04.08 18:51

iterator - 반복자 프로그래밍/STL2010.04.08 18:51






vector나 deque같이 [] 를 통해 직접 값을 참조 할 수 있는 경우엔 괜찮지만,

그렇지 않은 경우 list나, set, map같은 경우는

[]연산자를 사용 할 수가 없다.

그래서 존재하는것이 반복자,

STL의 컨테이너들을 가르키는 포인터라고 이해하면 편하다(그렇다고 포인터와 똑같지는 않다.)
iterator 예제

이 처럼 사용이 가능하다.
앞으로 자주 보게 되기 때문에 특별한 설명은 하지 않겠음.

'프로그래밍 > STL' 카테고리의 다른 글

algorithm  (0) 2010.04.08
연관 컨테이너 - Set, Map, multiSet, multiMap  (0) 2010.04.08
iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
2가지 변수를 저장하는 pair  (0) 2010.04.04
Posted by 안식의후크





일단 vector와 deque는 동적 배열,
list는 링크드 리스트 구조 라고 보면 될듯 하다.


vector는 stack구조,
deque는 queue구조 라고 볼 수 있는데.

둘다 동적 배열의 기능으로써 데이터를 삽입하는 것에는 큰 차이가 없다.

vector는 뒤에서 부터,
deque는 앞, 뒤 양쪽에서 삽입이 가능하다.

vector의 사용법.

다음은 deque의 사용법.


list는 [] 참조가 불가능하고 나머지는 비슷하다.
list를 참조하기 위해서는 반복자가 필요 하다.
일단 개념만 파악하기 위해 간단한 예제를 보자.

소스를 보면 데이터를 참조해서 출력하는것이 아닌,
단순히 최상위 데이터만 확인, 데이터를 하나씩 pop하고 있다.
일단 저런식으로 사용한다는 것만 파악해 두자.

'프로그래밍 > STL' 카테고리의 다른 글

연관 컨테이너 - Set, Map, multiSet, multiMap  (0) 2010.04.08
iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
2가지 변수를 저장하는 pair  (0) 2010.04.04
numeric_limits.  (0) 2010.04.02
Posted by 안식의후크
2010.04.05 20:47

용어적 설명. 프로그래밍/STL2010.04.05 20:47






컨테이너 :
임의 타입 원소 집합.
동적 배열이나 링크드 리스트 처럼 구현이 되어있다.

반복자 :
원소 집합을 순회 하기 위해 사용
어떠한 컨테이너라도 공통 인터페이서 제공
컬렉션 클래스와 별개로 독립적으로 작동
포인터와 유사, ++연산, *연산이 가능

알고리즘 :
원소들의 처리를 위해 사용
모든 컨테이너에 공통적으로 적용
공통적으로 하나만 사용
유연성이 강하고, 사용자에 맞는 알고리즘 구현 가능

'프로그래밍 > STL' 카테고리의 다른 글

iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
2가지 변수를 저장하는 pair  (0) 2010.04.04
numeric_limits.  (0) 2010.04.02
auto_ptr의 개념.  (0) 2010.04.02
Posted by 안식의후크
2010.04.04 18:44

2가지 변수를 저장하는 pair 프로그래밍/STL2010.04.04 18:44






음, 특별히 어려운것은 없다.
하나의 변수형(2가지를 저장하는)이라고 보면 쉽게 이해가 가능,


pair의 첫번째 변수에 접근할 때는
pair.first;
두번째 변수에 접근할 때는
pair.second;
를 해주면 된다. 소스를 보면 너무 복잡하게 보일지도 모르지만,

를 선언하고,
를 사용해 주면 훨씬 간결하게 표현 할 수 있다.

'프로그래밍 > STL' 카테고리의 다른 글

iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
2가지 변수를 저장하는 pair  (0) 2010.04.04
numeric_limits.  (0) 2010.04.02
auto_ptr의 개념.  (0) 2010.04.02
TAG C, C++, C언어, pair, STL
Posted by 안식의후크
2010.04.02 15:15

numeric_limits. 프로그래밍/STL2010.04.02 15:15






각 타입의 최대, 최소값을 구해주는 STL



사용은 이처럼 하게 되고,
사용 자체 보단,
이 클래스를 구현한다고 했을땐,
템플릿 특수화를 사용하게 되는데

그것에 대해서 살짝 집어 보고 넘어가도록 하자.

'프로그래밍 > STL' 카테고리의 다른 글

iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
2가지 변수를 저장하는 pair  (0) 2010.04.04
numeric_limits.  (0) 2010.04.02
auto_ptr의 개념.  (0) 2010.04.02
Posted by 안식의후크