출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/16


이번에는 set에 대해서 설명하겠습니다. 이것을 사용하려면 set의 헤더 파일을 포함해야 합니다. set 요소를 추가하면 자동으로 정렬됩니다. 또한 요소의 추가는 insert 함수에서 수행하고, 인수에 값을 설정하면 됩니다 find 함수가 있고, 검색도 할 수 있습니다.

다음 코드를 봐주세요.


소스코드 보기


이것을 실행하면 이렇게 됩니다.


요소를 제거하려면 erase 함수를 사용하여 인수에 그 반복자를 지정합니다. 그 이외에는 vector 등과 같은 함수를 사용할 수 있습니다. 하지만 인덱스에 대해 액세스를 할 수는 없습니다. 모두 반복자로 액세스합니다.

이번 설명은 이상입니다.



'공부 > C/C++' 카테고리의 다른 글

포인터와 동적배열  (0) 2014.08.21
(C++) 클래스 내의 static 지정자  (0) 2014.08.07
(C++) 컨테이너【map】  (0) 2014.04.04
(C++) 컨테이너【queue】  (0) 2014.04.04
(C++) 컨테이너【stack】  (0) 2014.04.04

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/15


이번에는 map에 대해서 설명하겠습니다. 이것을 사용하려면 map이라는 헤더 파일을 포함해야 합니다. map은 조금 특수한 컨테이너에서 상당히 사용 빈도가 높은 컨테이너입니다. map은 있는 키 값과 함께 컨테이너에 넣고 그 키를 다시 삭제하거나 변경할 수 있는 컨테이너 입니다. 또한 요소를 추가 할 때, 키를 기반을 자동으로 정렬됩니다.

다음 코드를 봐주세요.


소스코드 보기


이걸 실행시키면 이렇게 됩니다.


우선, map의 선언 내용에 대해서 입니다만, 인수를 두 개 지정합니다. 첫째는 키, 둘째는 그 값입니다. 키는 나중에 컨테니어를 검색 할 때 사용될 것입니다. 위의 코드는 키에 int 형 값에 char*로 설정 지정합니다.

요소를 추가 할 때 insert 함수를 사용합니다. 그 인수의 지정에는 다음과 같은 세 가지가 있습니다.


  • map<키_형식, 그의_값_형식>::value_type(키,  값);
  • pair<키_형식, 그의_값_형식>(키,값);
  • make_pair(키, 값);
가장 간단한 make_pair를 사용하는 것이 손쉽고 빠릅니다. 이것들을 사용하여 요소를 추가합니다. 만약 키가 같은 값의 요소를 추가한 경우, 중복되는 값은 무시됩니다. 이 문제를 해결하려면 중복 키 등록이 가능한 multimap을 사용합시다. 이것을 사용하려면 multimap이라는 헤더 파일을 포함해야 합니다. 중복 키 등록이 가능할 뿐, 나머지는 map과 사용 방법이 동일합니다.

그럼, 각 요소에 액세스하는 방법입니다만, 기본적으로는 반복자를 사용합니다. 해당 반복자를 취득 하려면


키의 값은

(*반복자_이름).first

실제 값은

(*반복자_이름).second


혹은

키의 값은

반복자_이름->first

실제 값은

반복자_이름->second


이런 방식으로 취득해옵니다. 또 포인터처럼 사용할 수 있습니다. 당연히 값의 변경도 가능합니다. 인덱스에 대한 액세스는 기본적으로 불가능하지만, 기 값을 인덱스로 취급하는 경우에는 액세스 할 수 있습니다. 예를 들어

test[3];

이라고  쓰면, 컨테이너의 키가 3이 되어있는 요소의 값을 가져오게 됩니다. 이제 각 요소에 액세스하는 방법도 이해할 수 있겠지요? 기타 함수의 내용은 지금까지 공부한 컨테이너와 같습니다. 하지만 자주 사용하는 기능으로는 find 함수가 있겠습니다. 이 인수에는 키 값을 지정합니다. 만약 그 키가 있으면 짝이있는 요소의 값을 반환합니다. 없으면 그 컨테이너의 end() 반복자를 돌려줍니다. 마지막 두 줄은 검색 후 발견된 키 요소의 값을 실제로 볼 수 있습니다.

map 요소의 제거는 erase 함수를 사용합니다. 이 부분 함수는 vector 같은 것들과 동일합니다. 이 컨테이너는 저도 자주 쓰니 꼭 기억하세요.

다음은 set에 대해서 설명하겠습니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) 클래스 내의 static 지정자  (0) 2014.08.07
(C++) 컨테이너【set】  (0) 2014.04.04
(C++) 컨테이너【queue】  (0) 2014.04.04
(C++) 컨테이너【stack】  (0) 2014.04.04
(C++) 컨테이너 【deque】  (0) 2014.04.03

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/14


이번에는 queue에 대해서 설명하겠습니다. 이것을 사용하려면 queue 헤더 파일을 포함해야 합니다. 이것은 대부분 stack과 같습니다. 다른 걸 말해보자면, stack에서 요소를 제거 할 때 pop을 사용하고 있었습니다만, 그때의 동작은 후행 요소에서 제거되어 갔습니다. 하지만 queue의 경우 첫 번째 요소에서 제거 됩니다. 즉, queue의 경우 추가하려면 끝에 추가가 됩니다만, 제거 될 때는 가장 오래된 요소에서 제거된다는 겁니다. 이 구조를 FIFO(First In First Out)이라고 합니다. 반대로 stack의 구조를 LIFO(Last In First Out)이라고 합니다.

또한, stack에서는 top 함수가 있었습니다만, queue는 그것이 없는 대신, 위로 요소를 꺼낼 front 함수와 마지막 요소를 꺼낼 back 함수가 있습니다.

아래 코드를 봐 주세요.


소스코드 보기


이렇게 하면 4와 1로 표시가 됩니다. pop 함수를 실행하면 먼저 추가한 첫 번째 요소가 제거 되었는지 알 수 있습니다.


다음은 map에 대해 설명하겠습니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너【set】  (0) 2014.04.04
(C++) 컨테이너【map】  (0) 2014.04.04
(C++) 컨테이너【stack】  (0) 2014.04.04
(C++) 컨테이너 【deque】  (0) 2014.04.03
(C++) 컨테이너【list】  (0) 2014.03.29

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/13


이번에는 stack에 대해 설명하겠습니다. 이것을 사용하려면 stack 헤더 파일을 포함해야 합니다. stack의 매커니즘은 요소를 점점 위로 쌓아가는 느낌입니다. 요소를 제거 할 때도 맨 위에있는 요소만 제거할 수 있습니다. 함수도


empty → 컨테이너가 비어있는 것을 확인

pop → 요소를 끝에서 제거

push → 요소를 끝에 추가

top → 후행 요소를 취득

szie → 요소 수를 취득


이 정도 밖에 없습니다. 특정 요소에 액세스 하는 것도, key를 사용하는 것도 불가능하므로 반복자는 없습니다.

아래의 코드를 봐주세요.


소스코드 링크


이걸 실행하면 4와 3이 나오게 됩니다. 특별하게 대단한 걸 하지 않았습니다. 0 ~ 4까지의 값을 push 함수 끝에 추가하고, top 함수로 표시하고 있습니다. 그런 다음 pop 함수 끝에 요소를 제거하고 표시하고 있을 뿐입니다. 이런 일 밖에 할 수 없는 미묘한 컨테이너입니다. (웃음)

저도 사용한 적은 없네요. 뭐, 이런 것도 있구나 쯤으로 생각해놓읍시다.


다음은 queue에 대해 설명하겠습니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너【map】  (0) 2014.04.04
(C++) 컨테이너【queue】  (0) 2014.04.04
(C++) 컨테이너 【deque】  (0) 2014.04.03
(C++) 컨테이너【list】  (0) 2014.03.29
(C++) 컨테이너 【vector】  (0) 2014.03.27

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/12


이번엔 컨테이너 deque에 대해 설명합니다. 사용하려면 deque 헤더를 포함해야 합니다. deque 내용은 대부분 vector와 같습니다. vector에 push_front와 pop_front가 추가된 정도입니다. vector와 같이 key를 사용하여 각 요소에 액세스 할 수 있습니다.

아래 코드를 봐주세요.


소스코드 링크



이걸 실행하면 이렇게 됩니다.



insert 함수와 erase 함수를 사용하여 보았습니다. 이것은 반복자를 사용하여 삽입, 삭제 위치를 지정합니다. 이 함수는 vector, list 컨테이너에서 사용할 수 있습니다.

다음은 stack을 설명하겠습니다.


'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너【queue】  (0) 2014.04.04
(C++) 컨테이너【stack】  (0) 2014.04.04
(C++) 컨테이너【list】  (0) 2014.03.29
(C++) 컨테이너 【vector】  (0) 2014.03.27
(C++) STL에 대해서  (0) 2014.03.27

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/11


이번에는 컨테이너 중 list에 대해 설명하겠습니다. 기본적으로는 vector와 사용법이 똑같습니다만, 몇 가지 함수가 늘었습니다. 또한 인덱스에 액세스 할 수 없게 되었기 때문에 주의하시길 바랍니다. 그리고 물론 list 컨테이너를 사용하려면 list 헤더를 포함해야 합니다.

일단 아래의 코드를 봐주세요.


소스코드 링크



이것을 실행하면 이렇게 됩니다.




선언 방법 등은 vector 때와 똑같으므로 생략하겠습니다. 증가 함수에 대해서만 설명하도록 합니다.

  • push_front, pop_front 함수

→ 요소 앞에 추가,이동


  • remove 함수
→ 지정된 값을 가지는 요소를 모두 삭제

  • sort 함수
→ 컨테이너의 요소를 오름차순으로 정렬
→ 내림차순으로 정렬하려면 sort 함수의 인수 [greater <컨테이너의_형식>()]을 지정한다.

  • merge 함수
→ 컨테이너 끼리 결합시킨다.
→ 첫 번째 인수와 두 번쨰 인수에 각각 결합하려는 컨테이너를 지정하지만, 첫 번째 인수의 컨테이너가 결합된 컨테이너가 된다.
→ 결합 전에 미리 정렬 해 둘 필요가 있다.


위의 함수 설명과 같습니다. 큰 차이로는 선두 요소를 추가, 삭제할 수 있게 된 것, 그리고 정렬(sort), 결합이 가능해진 것이겠습니다. vector에서 사용한 함수도 똑같이 구현되어 있습니다. (일부는 사용할 수 없을지도 모릅다만)


다음은 deque에 대해 설명하겠습니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너【stack】  (0) 2014.04.04
(C++) 컨테이너 【deque】  (0) 2014.04.03
(C++) 컨테이너 【vector】  (0) 2014.03.27
(C++) STL에 대해서  (0) 2014.03.27
(C++) string 형식  (0) 2014.03.27

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/10

(140419 - 지식이 딸려서 배열을 인덱스라고 썼던 걸 수정)

(141110 - 인덱스 맞는데 왜 수정했을까라고 생각 중...;;)


우선 컨테이너 vector를 설명하겠습니다. vector를 이용하려면 vector라는 헤더 파일을 포함해야 합니다. 또한 std라는 네임 스페이스에 속합니다. 일단 아래의 코드를 봐주세요.


해당 코드는 제대로 실행되지 않게 보입니다. 그러므로 링크로 대체합니다. (문법 강조 지원)

소스 코드 보기


이것을 실행하면 이렇게 됩니다.




그럼 꽤 길지만 설명하겠습니다. main 함수 내에서 먼저 vector 컨테이너와 그 반복자[각주:1]를 선언합니다. 반복자는 컨테이너의 요소가 어떤 위치를 가리키고 있는지를 나타내는 포인터와 같은 것입니다. 각각 쓰는 법은


//컨테이너

vector<컨테이너의_형식>컨테이너_이름(필요하다면 생성자 인수 지정)

//반복자

vector<컨테이너의_형식>::iterator 반복자_이름


쯤이네요. 컨테이너 형식이라고 하는 곳에 앞으로 만드는 리스트의 형식을 지정합니다. int로 지정되면 컨테이너는 int 형식만 다룰 수 있습니다. 그 다음은 컨테이너 이름 뒤에 생성자의 인수를 지정할 수 있습니다. 첫 번째 인수에 요소 수를 두 번째 인수에 값을 지정합니다. 생략하면 요소 수가 제로로 만들어집니다.


반복기 선언에 관해서는 써있는대로 입니다만, ::iterator라고 써져있는 부분은 종류가 세 가지가 있는데,

  • iterator
  • reverse_iterator
  • const_iterator
가 되겠습니다. 각 요소에는 반복자를 사용하여 액세스 합니다. 예를 들어, 요소가 5개인 컨테이너가 있다고 합시다. 지금 반복시를 가리키는 위치가 첫 번째 요소라고 할 때, 다음 요소로 반복자를 이동하려면

++begin;

라고 씁니다. 이제 두 번쨰 요소에 반복자가 있게 된 것입니다. 이것이 보통의 iterator를 사용한 경우의 동작인데, reverse_iterator를 사용하면,
++begin;
라고 쓴다면 지금 가리키는 위치의 전 요소의 위치에 반복자를 이동시킵니다. 예를 들어, 현재 반복자의 위치가 요소 3을 가리킨다면, ++begin일 경우, 반복자가 요소 2의 위치로 이동합니다. ++라고 더했는데, 반복자의 위치가 돌아간다는 점을 주의하세요.
덧붙여서 iterator는 요소의 위치를 가리키는 그저 포인터 같은 것입니다. 그 요소의 실제 값을 갱신하려면, 포인터처럼 앞에 별표[각주:2]를 붙입니다. 이제 그 요소에 액세스 할 수 있고, 재작성, 혹은 읽기가 가능해집니다.

만약 const_iterator를 사용하여 반복자를 만든 경우, 다시 쓰거나 할 수 없으며 읽기만 됩니다. 추가로 iterator를 사용하여 반복기를 만들었다고 해도

--begin;


라고 쓰면 이전 요소에 반복자를 이동시킬 수 있습니다.

이제 컨테니어 만들기 및 반복자의 작성은 이해할 수 있겠나요? 다음은 각 함수에 대해서 설명하겠습니다.

우선 첫 번째, push_back 함수입니다. 이 함수에 값을 지정하면 해당 값을 컨테이너의 끝을 추가해줍니다. 이번 코드는 생성자에 아무것도 지정하지 않고 콘테이너를 만들었기 때문에 이 함수를 실행한 시점에서 컨테이너에 이 10의 값이 들어간 요소가 하나 밖에 없습니다. 다음 줄에 가서, 인덱스를 사용하여 요소에 액세스하고 값을 표시합니다. vector에 따라서 인덱스를 사용하여 요소에 액세스 할 수 있습니다. 하지만 앞으로 설명하는 다른 STL은 인덱스 사용할 수 없는 것도 있으므로 주의하시길 바랍니다. 

다음 줄 끝에 또 20을 세트합니다. 이 시점에서 10 → 20이라는 순서로 요소가 세트되고 있는 것입니다. 그런 다음 begin 함수와 end 함수를 사용하고 있습니다. 이것은 컨테이너의 첫 번째 요소의 반복자와 마지막에 다음 요소의 반복자를 돌려줍니다. end 함수는 마지막 요소 다음 요소의 반복자를 돌려줍니다. 주의 하세요.

그리고, 그 다음 그 반복자를 사용하여 컨테이너 내부 요소의 값을 모두 표시합니다. func 함수라는 것을 만들고, 첫 번째 인수와 두 번째 인수에 반복기가 오도록 설정합니다. 이와 같이 반복자도 형식으로 설정하여 함수로 이용하실 수 있습니다. func 함수 내부에서 for 루프문이 이루어지고 있습니다만, begin!=end라는 것에 주목해야 합니다.

begin에는 첫 번째 요소를 가리키는 반복자가, end는 마지막 요소의 다음을 가리키는 반복자가 들어있습니다. for 루프에서 ++begin을 하고 있기 때문에에, 1루프 당 반복자가 점점 끝으로 이동하게 됩니다. end가 마지막 다음 요소를 가리키고 있으며, begin이 더해져 가고, 마지막의 다음 요소까지 반복자가 이동했을 때, begin과 end는 등호 관계가 되기 때문에, begin!=end 조건에  어긋나지요? 즉 처음부터 마지막 요소까지 표시하고 루프를 빠지게 한다라는 겁니다. 이게 func 함수의 구조입니다.

반복자를 사용할 때는 이런 함수를 만들어두는 편이 여러가지로 편리합니다.


그리고 pop_back 함수를 설명하겠습니다. 이것은 컨테이너의 마지막 요소를 지우는 함수입니다. 실행한 후 사라지는 것을 알겠지요?


이상으로 이번 코드에 있는 함수의 설명은 끝입니다. 하지만 더 많은 기능을 제공하기 때문에, 대충 소개해두겠습니다.


assign()     요소를 할당

at()          지정된 위치의 요소의 반복자를 반환

back()      마지막 요소의 반복자를 반환

clear()       모든 요소를 제거

empty()    컨테이너가 비어있는지 여부를 판정. 비어있으면 참

erase()     요소를 제거 (인수는 삭제할 위치의 반복자를 지정)

front()      위로 요소의 반복자를 반환

insert()     요소를 삽입 (첫 번째 인수에 삽입할 위치의 반복자, 두 번째 인수 값)

max_size() 유지 할 수 있는 최대 요소 수를 반환

rbegin()    말미를 가리키는 역방향 반복자를 반환

rend()      선두를 가리키는 역방향 반복자를 반환

reszie()    요소 수를 변경함

size()       요소 수를 반환함

swap()     두 요소를 교환함


중요한 것들만 적었습니다만, 더 많이 있습니다. 사용법을 하나 하나 설명하자니 해가 져버리므로 굳이 소개하지 않습니다만 시험 삼아 사용해보면 의외로 간단하게 사용할 수 있기 때문에 사용해보시는 게 좋겠습니다. 다양하게 만져보세요.


이번 설명은 이상입니다. 다음은 list 컨테이너에 대해서 설명하겠습니다.

  1. iterator [이터레이터] [본문으로]
  2. * [본문으로]

'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너 【deque】  (0) 2014.04.03
(C++) 컨테이너【list】  (0) 2014.03.29
(C++) STL에 대해서  (0) 2014.03.27
(C++) string 형식  (0) 2014.03.27
(C++) C++의 문자열 출력에 대해서  (0) 2014.03.26

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/9


이번에는 STL은 무엇인가에 대해서 설명하겠습니다. STL은 C++ 표준에 정의된 표준 라이브러리 중 하나입니다. 라이브러리는 함수가 모여 만들어진 것이라고 생각해주시면 되겠습니다.

그럼 이 STL에는 어떤 것들이 있을까라고 하면, 리스트를 쉽게 만들 수 있습니다. 리스트는 메모리를 동적 확보하고, 각각 관련성을 갖게 하고, 연쇄 구조처럼 하나의 리스트를 만드는 느낌의 구조입니다.

예를 들면, A~C는 메모리를 확보했다면, A→B→C처럼 A, 다음은 B, 다음은 C 식으로 관련을 가지고 하나로 연결해주는 이미지입니다. C언언어만 한다고 생각하면 되는데, 동적 확보나 메모리의 해방 등의 수고가 걸려버립니다. 이 근처의 처리를 간략화 되어 간편하게 리스트 구조를 만들도록 한 라이브러리가 STL이라고 하는 것입니다. 그 라이브러리를 사용하려면 몇 가지 템플릿이라고 불리는 것을 사용합니다. 템플릿은 클래스와 비슷한 의미인데, 일반적인 학급을 그저 단순히 생각하면 처음부터 학급 안의 변수과 함수의 형태를 미리 지정해 내야죠? 그럼 이 템플릿을 사용하면 임의의 형식을 지정하여 인스턴스를 생성할 수 있습니다. 바로 형태만 있고 내용물을 여러가지 형태의 임의로 변경할 수 있는 템플릿이란 말 그대로요.


그 STL템플릿에 대해서는 자주 쓰이는 것이 다음과 같은 것들이 있습니다.


  • vector
  • list
  • deque
  • stack
  • queue
  • map
  • set

이런 것 들입니다. 이들은 데이터를 관리하는 템플릿이기 때문에 컨테이너라고도 불립니다.

다음에는 상기의 템플릿을 차례대로 해설하겠습니다.


'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너【list】  (0) 2014.03.29
(C++) 컨테이너 【vector】  (0) 2014.03.27
(C++) string 형식  (0) 2014.03.27
(C++) C++의 문자열 출력에 대해서  (0) 2014.03.26
(C++) 가상 함수  (0) 2014.03.26

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/8


이번에는 C++에서 새로 추가된 String 형식에 대해서 설명하겠습니다. String 형식이라고 했지만, 엄밀하게는 클래스입니다. String 형식을 사용하려면 "string”을 포함해야 합니다. 항상 어미에 붙였던 ".h"는 필요로 하지 않습니다. 뭐냐하면, C에서 귀찮았던 문자열 처리를 쉽게 해주는 것입니다. 예를 들어 C에서 초기 값 설정 이외의 때 배열에 문자열을 설정하려면


char test [10];

test = "가나다라마바사";


같이 직접 할당할 수 없습니다. (선언 시 초기 값으로 설정할 때 가능)

String 형식은 이것을 


string str;

str = "가나다라마바사";


와 같이 쉽게 설정할 수 있습니다. 또한 지금까지 처럼,


str[3] = 'd';


같은 key를 사용하여 각 요소에 개별적으로 액세스하여 할당할 수 있습니다. 또한 클래스이므로, 기본적으로 어떤 함수가 구현되어있습니다. 주로 쓰이는 것을 몇 가지 소개하겠습니다.

아래 코드를 봐주세요.


소스코드 보러가기[각주:1]




일부 기능이 있기 때문에 위에서 부터 보고 갑시다. 첫째, size 함수에서 이것은 문자 수를 돌려줍니다. str 변수에 들어있는 문자는 7문자이므로 7이 되돌아오고 있습니다. 같은 의미의 length 함수도 상관 없습니다.


그런 다음, empty 함수입니다만, 이것은 대상의 변수가 비어있는지 검사해줍니다. 빈 경우 0이 아닌 값을 반환합니다. 그게 아니라면 0을 반환하게 됩니다.


다음은 함수는 아니지만, string 함수는 그저 + 연산자로 덧셈하는 걸로도 문자의 연결이 가능합니다. 나중에 더한 것이 이전 변수 뒤에 문자가 들러붙습니다. 실행 결과를 보시면 알 수 있습니다.


그리고 substr 함수입니다. 이것은 첫 번째 인수에 숫자를 지정하면 전부터 센 문자 번호에서 뒤에 문자를 모두 출력해줍니다. 첫 번째 문자는 0 문자부터 시작됩니다. 이번에는 5로 지정하고 있으므로 F에서 표시되어 있습니다. 이 함수는 두 번째 인수에 추가 숫자를 지정하여 해당 위치에서 무슨 문자까지 꺼내기, 라는 것도 지정할 수 있습니다.


마지막으로, c_str 함수입니다. 이것은 string 형식에서 char 형식으로 변환 할 때 사용하는 함수입니다. string 형식은 유용하지만 char 형식과는 다르므로, char 형식을 사용하는 함수는 string 형식은 사용할 수 없습니다. 그래서 변환이 필요합니다. 이 c_str 함수를 실행하면 char 형식에 변환된 문자열의 포인터를 돌려줍니다. 위의 코드에서는 문자열을 계속 사용할 수 있도록 하기 위해, 미리 확보해놓은 char 형식 배열 test에 strcpy 함수를 사용하여 문자열을 복사합니다. (포인터 변수로 받아도 좋지만, 그 소스 영역은 string 형식이 손실된 때 소멸할 가능성이 있기 때문에 일부러 배열에 복사합니다.)

이 함수는 첫번째 인수 대상 포인터, 두 번째 인수에 문자 또는 문자열이 있는 포인터를 지정합니다. 그럼 char 형식으로 변환할 수 있기 때문에 평소 printf 함수로 표시하고 있습니다.


이상 string 형식의 설명입니다. char 형으로 변환만 조심하면 매우 편리해서 꼭 사용해보세요. 이외에도 많은 함수가 있기 때문에, 인터넷에서 검색하여 여러가지 조사해봅시다. 다음부터는 STL에 대해 설명해 가려고 합니다.

  1. 해당 코드는 티스토리 에디터 기능과 syntax highlighter 기능의 충돌로 정확히 표기되지 않아 링크로 대체합니다. [본문으로]

'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너 【vector】  (0) 2014.03.27
(C++) STL에 대해서  (0) 2014.03.27
(C++) C++의 문자열 출력에 대해서  (0) 2014.03.26
(C++) 가상 함수  (0) 2014.03.26
(C++) 클래스의 상속  (0) 2014.03.26

출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/7


이번에는 C++ 문자열 출력에 대해 설명합니다. C에서 printf 함수와 puts 함수를 사용하여 문자열을 출력하고 있었습니다만, C++에서도 전용 함수가 있습니다.

다음 코드를 봐주세요.



#include 
#include 

int main(void)
{
	char test[30];

	std::cin >> test;

	printf("%s\n",test);

	std::cout << test << std::endl;
	
	return 0;
}



이렇게 하면, 문자의 입력을 요구하게 되므로 입력하면 해당 문자를 두 번 표시합니다. 이 코드 안의 std::cin이 입력 함수이고, std::cout가 출력 함수입니다. 또한 >>이 입력 연산자 <<이 출력 연산자라고 말합니다. 이 함수를 사용하기 위해서는 iostream을 포함(include) 해야 합니다. (.h 제외) 그럼 이 cin의 앞에 붙어있는 std::는 무엇일까요?

std는 네임 스페이스로, 그룹 조립을 위한 공간과 같은 것입니다. C++ 에서 전역 변수와 전역 함수는 같은 이름으로 정의할 수 없습니다. 하지만 이 네임 스페이스로 묶어주면, 그것을 제한하는 영역이 되므로 다른 곳에서도 같은 이름의 변수와 함수를 정의할 수 있습니다.

추가로 이번엔 cin이라는 함수가 std라는 네임 스페이스에 속해 있었습니다. 네임 스페이스에 속하는 함수는 콜론을 두 번(::) 쓰고 그 뒤에 함수 이름을 쓰는 것만으로도 액세스 할 수 있습니다. 그 cin과 함수와 함꼐 입력 연산자 >>를 쓰고, 오른쪽에 할당되는 변수를 써주고 있습니다. 마지막 std::endl이라고 써 있습니다만, 이것은 개행을 나타내는 것입니다. 이것을 쓰는 것만으로 줄 바꿈을 할당할 수 있습니다. 물론 출력 연산자도 필요합니다.


이것이 C++ 문자열 출력 방법입니다. 신경이 쓰인 사람도 있을 거라고 생각합니다만, std::는 매번 쓰기 귀찮지요? 이를 해소하는 방법이 있습니다. 글로벌 영역에

using namespace std;

라고 쓰는 것만으로도, std::cin라고 써야했던 함수를 cin로 쓸 수 있게 됩니다. 또한 cout, endl도 함꼐 쓸 필요가 없습니다. 만약 다른 함수에서 네임 스페이스 이름을 쓰는 것이 번거로우면, using namespace 네임_스페이스_이름;라고 쓰면 생략할 수 있습니다. 꼭 기억하시길 바랍니다.


이번은 여기까지.

다음은 string 형식에 대해 설명합니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) STL에 대해서  (0) 2014.03.27
(C++) string 형식  (0) 2014.03.27
(C++) 가상 함수  (0) 2014.03.26
(C++) 클래스의 상속  (0) 2014.03.26
(C++) 클래스의 생성자와 소멸자  (0) 2014.03.26