데이터셋을 시퀸스(연속적인)한 값으로 채우고 싶을 때는 iota 알고리즘을 사용합니다.

앞서 소개한 알고리즘들은 <algorithm> 헤더 파일에 정의 되어 있는 것에 반해 iota 알고리즘은<numeric> 헤더 파일에 정의 되어 있습니다.

 

itoa

template<class ForwardIterator, class T>

  void iota(ForwardIterator first, ForwardIterator last, T value);

 

 

아래는 예제 코드와 결과 입니다.

#include <iostream>

#include <vector>

#include <numeric>

using namespace std;

 

int main()

{

           vector<int> Numberlist;

           Numberlist.push_back( 2 );

           Numberlist.push_back( 5 );

           Numberlist.push_back( 7 );

           iota( Numberlist.begin(), Numberlist.end(), 2 );

 

           for( auto IterPos = Numberlist.begin(); IterPos != Numberlist.end(); ++IterPos )

           {

                     cout << *IterPos << endl;

           }

 

           return 0;

}

 

결과 >

 

위 예제를 보면 아시겠지만 iota의 세 번째 인자의 값이 시작 값이고, 이후에 값이 하나씩 증가합니다.

by 흥배 2012. 9. 6. 09:00

예전에 Visual C++ 10과 관련된 책을 집필할 계획이 있어서 그때 작성한 글인데 책 출간 계획이 사라졌으므로(한참 전에)

그냥 공개합니다. 글은 초보자를 타겟으로 하고 있으며 Visula C++ 10의 디버깅 기능을 설명하고 있습니다.


도움이 되었으면 좋겠습니다^^



6장 디버깅.pdf


by 흥배 2012. 4. 23. 09:00
  • RF 2012.04.23 17:47 ADDR EDIT/DEL REPLY

    컴퓨터 공학도로써, 정말 유용한 내용을 담고있는것 같습니다. :)
    제 친구들과 후배들에게도 페이스북을 통해 나누고 싶은데, 문서의 다운로드 링크를 페이스북 비밀그룹에 업로드해도 될런지요? 물론 출처는 확실히 밝혀두도록 하겠습니다. :) 허락하지 않으시면 어쩔 수 없구요 ...

    • 흥배 2012.04.23 18:55 신고 EDIT/DEL

      문서를 마음대로 수정하지 않고 출처만 남겨주시면 마음대로 하셔도 괜찮습니다^^

  • RF 2012.04.23 20:43 ADDR EDIT/DEL REPLY

    감사합니다. :> 원문 링크와 함께 pdf 파일의 주소를 기재하겠습니다.

  • 붕어 2012.04.24 10:49 ADDR EDIT/DEL REPLY

    좋은 내용 공유해주셔서 감사합니다 ^^

  • 컴공 2012.04.28 17:14 ADDR EDIT/DEL REPLY

    감사합니다 이제 컴퓨터정보공학과 1학년으로서 어떻게 디버깅을 공부해야할지 막막했는데 도움이될거같다요 ^^

    • 흥배 2012.04.30 11:13 신고 EDIT/DEL

      도움이 되었다니 기쁘네요^^

VS.NET(VS2002)에서 MFC 프로젝트로 만들었던 프로그램을 VC++10 프로젝트로 변환하여 컴파일 했더니 에러가 발생하면서 아래의 경고가 나왔습니다.

C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlcore.h(35):#error This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.

 

에러 내용은 프로젝트에서 정의된 _WIN32_WINNT 버전이 0x403인데 atlcore.h 버전이 최소 0x0501 이상이 되어야 한다는 것입니다.

 

그래서 _WIN32_WINN 정의한 stdafx.h 파일을 열어보니

#define _WIN32_WINNT 0x0400

되어 있었더군요. 그래서 일단 이것을 최신이 좋다라는 생각에 아래와 같이 했습니다. ^^;;

#define _WIN32_WINNT 0x0600

 

그랬더니 이제는 아래와 같은 에러가 나오더군요. -_-;

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxcmn3.inl(29): error C2065: 'CCM_SETWINDOWTHEME' : 선언되지 않은 식별자입니다.

 

그래서 바로 구글링 들어갔습니다.

쉽게 저와 같은 에러가 나와서 질문을 올린 글을 찾았고 답변도 보았습니다.

문제 해결은 stdafx.h 파일에 정의된 버전의 숫자를 아래와 같이 하면 된다고 하더군요

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
#define WINVER 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif

#ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif

#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0501 // Change this to the appropriate value to target Windows Me or later.
#endif

#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
#define _WIN32_IE 0x0500 // Change this to the appropriate value to target IE 5.0 or later.
#endif

 

이렇게 하니 문제 없이 빌드가 성공 되었습니다.

 

주위에서 VC++의 새로운 버전이 나와도 쉽게 사용하지 못하는 경우가 오래 전에 만들었던 프로젝트를 포팅 할 수 없어서 이전 버전을 어쩔 수 없이 사용한다는 이야기를 종종 듣습니다.

그러나 저는 운이 좋아서인지 2002버전부터 순차적으로 새 버전의 VC++을 사용할 수 있어서 VC++6에서 VS2002로 넘어갈 때만 빌드 문제를 겪었습니다.

그래서 이런 포팅에 대한 문제는 잘 알지 못합니다. 이번에는 예전에 만들었던 코드를 C++0x 코드로 바꾸고 싶어서 오래 전에 만들었던 프로젝트를 VC++ 10로 포팅하면서 정말 정말 오랜만에 이런 문제를 겪어 보게 되고 해결 방법을 포스팅 할 수 있었습니다.

 

혹시 앞으로 또 이런 경우가 발생하면 바로 바로 공유하도록 하겠습니다
by 흥배 2010. 10. 26. 09:00
  • kkommy 2010.10.26 15:14 신고 ADDR EDIT/DEL REPLY

    전 아직도 이런 문제때문에 VS6을 못 벗어나고 있습니다.. ㅠㅠ

    • 흥배 2010.10.27 01:00 신고 EDIT/DEL

      다시 한번 시도해보세요. 이미 VS6에서 다음버전으로 넘어간 경우가 많아서 구글링 하면 대부분의 문제는 해결 가능합니다. 예전에 6에서 7을 넘을 갈 때는 사례도 별로 없고 지금처럼 구글링이 활성화 되어 있지 않아서 한국내의 커뮤니티에서 답을 구하지 못하면 풀지 못했는데 지금은 구글링의 덕택으로 우리가 겪는 대부분의 문제는 누군가 이미 경험하였고 해결책도 제시하고 있습니다.

VC++ 10 C++0x나 병렬 프로그래밍 라이브러리 이외에도 툴적인 측면에서도 여러 좋은 기능들이 추가 되었습니다. 알고 있으면 작업할 때 편리한데 시간이 부족하여 제가 아직 자세하게 찾아보지 못해서 소개하지 못한 것이 많이 아쉽습니다. 그래서 짥은 것이라도 틈틈이 시간나면 소개하려고 합니다.

 

VC++ 10에서는 디버깅 모드에서도 역어셈블리 코드를 볼 수 있습니다.

 

메뉴에서 “Debug” -> “Windows” -> “Disassembly”를 선택합니다.

 

아래와 같이 역어셈블리 코드 창이 나타납니다.

 

 

그러나 위 화면을 보면 코드 바이트는 표시되지 않고 있습니다.

코드 바이트를 보고 싶다면 위 화면 왼쪽 상단의 “Viewing Option”을 클릭합니다.

 

 

위와 같이 옵션을 선택할 수 있습니다. 이 중 “Show code bytes”를 선택합니다.

그러면 아래와 같이 코드 바이트가 표시됩니다.

 

 

참고

http://d.hatena.ne.jp/kkamegawa/20100130/p1

 

by 흥배 2010. 10. 11. 09:00
이제 막 프로그래밍 공부를 하시는 분들 중 C 나 C++ 공부를 하시는 분들이 꽤 있는 것으로 알고 있습니다.
보통 이 분들이 공부를 하기 위해 책을 사서 보면 책에서 사용하는 VC++ 버전이 6이나 8,9 일 것입니다.

책과 똑 같은 버전의 VC++을 설치하면 책을 따라하는데 문제는 없겠지만 최신 버전이 나왔는데 그걸 사용하지
않는다는 것은 큰 낭비라고 생각합니다.^^
특히 C/C++을 공부할 때는 IDE의 기능을 거의 사용하지 않기 때문에 프로젝트를 새로 생성하고 실행만 해보면
됩니다.
그래서 VC++10에서는 어떻게 프로젝트를 생성하고 실행하는지 그림으로 보여드리겠습니다.


- 새로운 프로젝트 생성하기


VC++10을 실행한 후 위 그림과 같이 메뉴에서 선택합니다.




그림과 같이 'Visual C++'을 선택한 후 '빈 프로젝트'를 선택합니다. 그리고 아래의 이름에는 적당한 이름을 입력합니다.




위에서 프로젝트 생성이 끝나면 코딩을 하기 위해서 파일을 하나 추가합니다.
'소스 파일'을 마우스 오른쪽 클릭을 하면 나오는 메뉴에서 위와 같이 선택합니다.




보통 공부할 때는 파일 하나만 만들어서 생성하니 그림과 같이 'cpp' 파일을 선택 후 이름은 적당한 아무 이름을 입력합니다.




전 위에서 'main.cpp'을 만들었습니다. 위에 간단한 프로그램을 만들기 위해 코딩을 했습니다.



만들어진 프로그램을 실행해봅니다. IDE에서 바로 실행해보고 싶을 때는 위와 같은 메뉴를 선택합니다.




코딩할 때 잘못한 부분이 없다면 위 그림같이 프로그램이 실행됩니다.



아주 아주 쉽죠? ^^
C/C++ 입문 공부도 VC++ 10에서 하세요 ~ ^^

by 흥배 2010. 6. 16. 08:30
  • 랄마린 2010.06.16 10:40 ADDR EDIT/DEL REPLY

    안녕하세요- 궁금한게 있는데, VC++10도 학생 무료 라이센스를 제공하나요? 이런데서 물어볼게 아니지만 마소 홈피가 정보찾는게 은근히 힘들어서;;; 혹시 아시면 답변부탁드립니다^^;

    • 흥배 2010.06.16 21:24 신고 EDIT/DEL

      드림스파크 말하는거죠? 네 제공하고 있습니다.^^

  • 초보 2011.01.07 00:52 ADDR EDIT/DEL REPLY

    책에는 getchar(); 가 빠져있어서 빼고 디버깅을 실행하니 책이 아주 잠깐 떴다가 바로 사라져버리네요
    getchar(); 가 무슨 기능을 하는거죠???
    그리고 저는 '디버깅을 하지 않고 시작' 자체가 없는데 이건 버젼이 달라서 그런건가요??

    • 흥배 2011.01.07 10:40 신고 EDIT/DEL

      VC++9(VS2008)까지는 실행하면 콘솔창이 사라지지 않는데 VC++10은 사라져서 그것을 막기위해 getchar()를 사용했습니다. getchar()는 키보드 입력을 받을 때까지 대기하는 기능이 있기 때문에 콘솔 창이 사라지지 않게 됩니다. 사용하는 버전이 express 인가요?

    • namo 2011.02.21 10:58 EDIT/DEL

      '디버깅을 하지 않고 시작'으로 프로그램을 수행하게 되면 프로그램을 수행후에 pause라는 명령을 통해 프로그램을 멈추는 기능을 IDE가 수행을 하게 됩니다. 아마도 콘솔용 애플리케이션에서 휘리릭 하고 끝나는 현상을 막기위해 그렇게 해놓은 것 같은데 VS2010은 아직 자주 써보지 않아서 확실히 모르겠군요. getchar()를 넣어도 되고, '계속하려면 아무 키나 누르십시오 . . .' 처럼 보이기 위해서는 system("pause")를 넣으셔도 됩니다.

  • 초보 2011.01.07 14:15 ADDR EDIT/DEL REPLY

    사용하는 버전은 professional을 받았습니다. 답변감사드립니다. 책에서 보는 소스에 getchar()를 붙이는걸 까먹으면 안되겠네요 이제 ㅎㅎ

  • 갈치 2011.02.18 10:29 ADDR EDIT/DEL REPLY

    cpp를 어디 넣어야 하나 고민하던 중에 좋은글을 찾아서 배우게 됩니다. 감사합니다!

| 1 |