함수 주요 형태(_stdcall, _cdecl, _fastcall)

프로그래밍/C/C++ 2014. 2. 24. 04:51

1. _cdecl

C 또는 C++ 프로그램에서 파라미터 전달시 디폴트로 사용

파라미터 전달은 오른쪽에서 왼쪽 방향으로 스택에 저장

파라미터 해제는 프로시저를 호출한 것이 책임짐(스택정리)

 

 

2. _stdcall

Windows API 프로시저에서 사용

파라미터 전달은 _cdecl과 동일

파라미터 해제는 프로시저 복귀 전에 이루어짐

장점

- 함수 독립성이 뛰어남

- 프로시저를 부르기 전에 스택에 파라미터를 쌓아놓고 그 프로시저를 부르기만 하면 그 함수가 리턴된 후에는 그 프로시저의 스택 포인터가

이전 상태로 복원되었으므로 복귀된 후에 호출한 프로시저에 대하여 신경쓸 필요가 없음.

- _cdecl 방식의 콜링컨벤션에 비해 코드 크기가 줄어든다.

- 스택을 해제하는 코드가 호출한 프로시저 안에 있으므로 이 프로시저가 여러 곳에서 호출된다 할지라도 스택 해제하는 코드는

프로시저 내에 하나만 존재함

 

 

3. _fastcall

처음 두 개까지의 파라미터는 스택을 사용하지 않고, ecxedx 레지스터를 사용함

그 이상의 파라미터에 대해서만 오른쪽에서 왼쪽으로 스택에 저장

스택 제거는 _stdcall과 동일

 

'프로그래밍 > C/C++' 카테고리의 다른 글

메모리 관리 함수(memset, memcpy, memmove)  (0) 2014.10.24
C++ 파일 입출력  (0) 2014.02.24
비트 연산자  (0) 2014.02.12
함수 포인터  (0) 2014.02.12
[STL]컨테이너 선택  (0) 2014.02.09

PHP document

프로그래밍 2014. 2. 23. 19:07

PHP(정식 명칭 "PHP: Hypertext Preprocessor")는 범용성을 지닌 널리 사용되는 오픈 소스 스크립트 언어입니다.

 

특히, 웹 개발 및 HTML에 포함하기에 적합하다.

# 소개용 예1)

 

 HTML을 출력하기 위해 많은 명령을 쓰는 대신 PHP 페이지는 "무언가" (여기서는, "안녕, 나는 PHP 스크립트야!"를 출력)

를 하는 추가적인 코드를 가진 HTML이다. PHP 코드는 "PHP 모드"로 들어가는 특수한 프로세싱 시말 지시 <?와 ?> 사이

에 들어가 있다.

 PHP가 클라이언트측 자바스크립트 등과 구별되는 점은 이 코드는 서버에서 실행하여, HTML 생성하여 전송하는 점이다.

클라이언트는 스크립트 실행 결과만을 받게 되고, 그 코드의 모양은 알 수 없다. 웹 서버를 설정하여 모든 HTML 파일을

PHP가 처리하게 할 수 있으며, 그러면 사용자가 무엇으로 처리하는 지 알 방법은 다.

 

PHP를 사용하는 가장 큰 이득은 초보에게는 매우 쉽고, 전문가에게는 많은 고급 기능을 제공한다는 점이다.

 

# 첫번째 PHP 스크립트 예2 : hello.php)

웹 브라우저를 이용해서 "/hello.php"에 접근한다. 로컬에서 개발한다면 URL은 보통 http://localhost/hello.php이나

http://127.0.0.1/hello.php일 것이지만, 이는 웹 서버 설정에 따라 달라진다. 모두 제대로 되었다면, 이 파일은 PHP에 의해

처리되어 다음 출력을 브라우저로 전송된다.

 

# PHP 스크립트 예3 : 변수 출력하기.php)

PHP에는 많은 변수의 형이 존재한다. 위 예제에서는 배열 원소를 출력했다.

 

$_SERVER는 PHP가 자동적으로 생성하는 변수 중의 하나에 불과하다. 매뉴얼의 예약 정의 변수를 보거나, 이전 섹션의

예제에서 사용한 phpinfo() 함수의 출력에서 전체 목록을 얻을 수 있다.

 

 

PHP 태그 안쪽으로 하나의 echo뿐이 아닌 여러개의 PHP문을 넣어서 작은 코드 블럭을 만들 수 있다. 예를 들면, Internet

Explorer를 체크하고 싶다면 다음과 같이 할 수 있다.

 

# PHP 스크립트 예4 : 제어문과 함수를 사용하는 예.php)

스크립트 출력 예제)

 

 여기서 두가지 새로운 컨셉을 소개한다. PHP에는 if문이 있다. C 언어에서 사용하는 기본 문법에 친숙하다면, 이것은 매

우 논리적으로 보일 것이다. 그렇지 않으면, PHP 소개서를 구해서 첫부분을 읽어보거나, 매뉴얼의 언어 레퍼런스 부분을

읽어봐라.

 

 두번째 컨셉은 strpos() 함수 호출이다. strpos()는 하나의 문자열을 다른 문자열에서 찾아내는 PHP 내장 함수이다.

여기서는 $_SERVER['HTTP_USER_AGENT'](haystack이라고 한다) 안에서 'MSIE'(needle이라고 한다)를 찾아봅시다.

haystack 안에서 needle을 발견하면, 이 함수는 haystack의 첫번째 문자로부터 needle의 위치를 반환한다. 발견하지 못

했다면 FALSE를 반환한다. FALSE를 반환하지 않았다면, if문은 TRUE로 판단하고 {중괄호} 안에 있는 코드를 실행한다.

그렇지 않으면, 코드를 실행하지 않는다. if, else, 그리고 strtoupper()나 strlen() 등의 함수를 사용하는 비슷한 예제도 쉽

게 작성할 수 있다. 

 

# PHP 스크립트 예5 : HTML과 PHP모드 섞기.php)


 

 

 

 

 

 

 

스크립트 출력 예제)

PHP echo문을 이용한 출력 방법 대신, PHP 모드를 빠져나가서 직접 HTML을 전송할 수 있다. 여기서 주의해야할 중요하

고 강력한 점은 스크립트의 논리적 흐름이 유지되고 있는 점이다. strpos()의 결과값에 따라서 오직 하나의 HTML 블록만

이 보여지게 된다. 즉, MSIE의 발견 여부에 따르게 된다.

 

PHP의 매우 강력한 기능의 하나는 HTML 폼을 다루는 방법이다. 이를 이해하는데에 중요한 기본적인 컨셉은 어떤 폼 요

소라도 자동적으로 PHP 스크립트에서 사용 가능하다는 점이다. 다음은 HTML 폼의 예제이다.

 

# PHP 스크립트 예6 : 간단한 HTML 폼.php)

이 폼에는 특별한 것은 아무것도 없다. 어떠한 특별한 태그도 가지지 않는 단순한 HTML 폼이다. 유저가 이 폼을 채우고

submit 버튼을 누르면, action.php 페이지가 호출된다. 이 파일은 다음처럼 작성할 수 있다.

 

스크립트 출력 예제)

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

멀티 스레드  (0) 2014.12.13
파이썬 argparse  (0) 2014.11.08
[STL] List  (0) 2014.03.06
[STL] Vector  (0) 2014.03.05
APM으로 서버 구동하기(설치) - AutoSet  (0) 2014.02.23

APM으로 서버 구동하기(설치) - AutoSet

프로그래밍 2014. 2. 23. 05:06

APM을 이용해 서버를 구축해 봅시다..

살다보니 안할줄 알았던 서버, 웹 쪽을 다루게 되네요(__)

 

APM은 서버를 구성하는 주요 도구인 Apache, PHP, MySQL의 머릿글자를 묶어서 이르는 말입니다.

여기서 Apache는 웹 서버 프로그램, PHP는 언어중의 하나이고 MySQL은 오픈소스 데이터 베이스의 하나입니다.

이 세가지를 한데 묶어 쉽게 설치할 수 있게 만든 프로그램이 바로 APMSetup이죠.

 

원래는 각자 설치해서 연동해 줘야 하지만 한번 설치로 3개를 연동시킬수 있어 사기(?)라고 불리는 프로그램입니다.

Apm을 설치하는 방법은 AutoSet, APMSETUP... 등이 있습니다.

APMSETUP은 2010년 업데이트가 중지되었으므로 AutoSet을 설치하겠습니다.

 

APM(AutoSet) 설치

1. http://autoset.net/xe/about_autoset 에 접속해 무료 다운로드를 클릭합니다.

 

 

 

 

2. 한국어를 선택합시다.

 

3. 다음, 다음. ...

 

4. 저는 선택하기 귀찮아서 Full installation을 선택하였습니다.

    모두 설치하면 XE, Gnuboard, kmsq, wordpress등이 설치 되는군요.

 

 

 

 

5. 설치를 완료하게 되면 아래와 같은 프로그램이 실행됩니다.

    처음상태에는 서버가 중지되어있습니다.

 

6. 제어 -> 웹서버 시작(W)를 선택해 웹서버를 시작합니다.

   저는 웹서버로만 쓸 예정이라 일단 다른것들을 다 종료해서 웹서버(80)으로만 표시되고 있네요.

   괄호 숫자는 포트 번호를 나타냅니다.

 

 

7. 웹서버 동작을 클릭하면 웹서버가 실제 동작하는지 확인합시다.

   방법은 매우 간단합니다. 인터넷 창을 열고 http://127.0.0.1/ 이라고 입력합니다.

   아래와 같은 화면이 출력되면 정상적으로 작동하고 있음을 확인할수 있습니다.

 

 

AutoSet관련사이트

1. AutoSet 공식 사이트 : http://autoset.net/xe/about_autoset

2. AutoSet 사용자 카페 : http://cafe.naver.com/autoset

3. AutoSet 페이스북 : http://www.facebook.com/AutoSet

 

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

멀티 스레드  (0) 2014.12.13
파이썬 argparse  (0) 2014.11.08
[STL] List  (0) 2014.03.06
[STL] Vector  (0) 2014.03.05
PHP document  (0) 2014.02.23

소스 편집용

카테고리 없음 2014. 2. 15. 00:52

 

 

 

#include <stdio.h>

 

void foo(int a) {printf("called foo(%d)\n", a);}

 

void main()

{

void (*fp)(int) = foo;

fp(10); // () 함수 호출 연산자

}

 

 

이중 포인터 개념 정리

카테고리 없음 2014. 2. 13. 23:32

int arr[2][3]; 로 int형 배열이 선언되어 있을때 원소의 개수는 몇개 일까요?

6개 같지만 2개입니다. 2차원 배열처럼 보이지만 실제 메모리는 1차원 이므로 2차원 배열이 아니라

1차원 배열의 확장입니다.

 

배열의 포인터는 int (*pArr)[3] = arr; 로 표현이 가능합니다.

 ☞ int *pArr[3]으로 작성하면 컴파일러는 int형 포인터를 리턴하고 변수가 배열인 함수로 해석합니다.(괄호 필수)

 

2차원 동적 배열을 선언할때 대부분

int **myArr = (int**)calloc(2, sizeof(int*));

for(int i=0; i<3; i++)

    myArr[i] = (int*)calloc(3, sizeof(int));

으로 선언하고 사용합니다. 이때 선언시 2차원 포인터를 사용해서 2차원 배열은 2차원 포인터를 사용하는것으로

생각하기 쉽습니다.

하지만 이차원 포인터로 생각하는 이유는 참조의 참조 2번의 참조를 거치기 때문에 사용하는것이지,

꼭 2차원 배열을 동적할당할 때에는 2차원 포인터를 사용하지 않아도 됩니다.

☞  int (*myArr)[3] = (int(*)[3])malloc(sizeof(int)*2*3); // c 스타일

     int (*myArr)[3] = static_case<int(*)[3]>malloc(sizeof(int)*2*3); // c++ 스타일

 

[정리]

1. 포인터 : 다른 지역의 변수를 접근하기 위해 사용한다.

2. 배열과 포인터 : 배열명은 자신의 첫 번째 원소의 시작 주소를 의미하는 상수 포인터.

                          이때 배열의 타입은 원소의 타입이여야 하고, 배열명을 사용하여 포인터에 저장할 경우, 

                          배열 전체 타입이 하나의 원소의 타입으로 축소된다. 이것을 decay(퇴화)라고 한다.

3. 배열포인터 : 배열 전체를 의미하는 포인터  // 타입(*포인터)[길이]

4. 포인터의 연산 : 포인터간의 연산(정수포함)은 제한적인 연산만이 가능하다.

                          포인터 - 포인터 = 정수

                      포인터 + 정수 = 포인터

                      포인터 - 정수 = 포인터

 

 

5. 함수의 포인터

     함수의 타입 : 리턴 타입과 매개변수 전체가 함수의 타입

     함수의 선언 : 함수의 심볼은 반드시 리턴 타입과 매개변수 사이에 위치

     ☞ 리턴타입 (*포인터명)(매개변수)

 

SDN(Software Defined Network)

카테고리 없음 2014. 2. 13. 20:48

SDN이란 무엇일까요?

기존의 전통적인 네트워크는 각각의 라우터, 스위치 허브등의 노드들의 링크로 구성되어 있습니다.

[그림1] 전통적인 네트워크 망

 

하지만 이러한 기존 네트워크는 여러가지문제점이 많습니다.

그중 한가지는 OSI 7계층등 여러개의 연결로 네트워크를 통하여 [그림2]와 같이 프록시 장비, 방화벽, IPS/IDS등의 장비

등은 각각 OSI계층으로 분할되어 있습니다. 이러한 절차를 거치다 보면 네트워크 전송 시간이 오래 걸리며, HW+SW 등의

분할로 관리가 어려운 측면이 많습니다. 따라서 이러한 단점을 보완하기 위해 [그림3]과 같이 단일 장비(HW+SW)로 구성

해서 속도면과 장비 관리 측면이 쉬운 장점이 있습니다.

[그림2] 기존 네트워크망의 문제

 

[그림3] SDN 네트워 조직망

 

[Open Flow]

SDK에 첫번째로 지정된 표준입니다. 하드웨어 계층 레이어에서 네트워크 디바이스 컨트롤러 들과의 통신을 정의합니다.

Openflow스위치는 테이블[그림5]을 관리해 룰을 지정, 제한합니다. 각 테이블은 어플리케이션을 통해 지정할수 있고,

테이블에 없는 주소는 라우팅(포워딩)하는 기능(컨트롤러 [그림6])을 수행합니다. 리눅스 기반에서 돌아가는 어플리케이

션은 동시에 여러개의 어플리케이션이 실행이 가능하며 사용자의 필요에 맞게 SW를 설계하여 사용할수 있는 장점이 있습

니다.

 

[그림4] SDN 아키텍처

[그림5] Openflow 스위치 테이블

 

 [그림6] SDK 구성 이미지

 

SDK의 전망

- 모든 스위치를 컨트롤러에서 처리하니 관리하기 쉽다.

- 하나의 정책에 일관되어 보안에 좋다

- 자주 움직이는 컨트롤은 새로운 포트번호 할당등을 통해 유연하게 대처가 가능하다.

- 기존의 장비보다 가격이 싼 장점이 있다.

- 구글가 아마존, IBM, CISCO, 마이크로소프트 등 SDN 장비 교체하는 추세이다.

 

개발

 - POS : 파이썬 기반

 -  NOX : C++기반

비트 연산자

프로그래밍/C/C++ 2014. 2. 12. 14:17

비트 연산자의 필요성

8개의 LED조명을 제어하기 위한 프로그램을 생성한다고 할때

  enum {LED0 = 0, LED1, LED2, LED3, LED4, LED5, LED6, LED7};

  enum {LED_OFF = 0, LED_ON = 1};

  char mmio[8] = {0, }; // 8개의 배열을 만든뒤

  mmio[LED1] = LED_ON; //LED1의 조명 ON

  mmio[LED3] = LED_OFF; //LED3의 조명 OFF 

로 조명을 제어 할수 있습니다.

하지만 이 부분에서의 문제점은 총 8개의 비트(0, 1)만으로 충분하지만, 사용 메모리 크기는 8비트 * 8개(64비트)

공간을 할당하여 사용하고 있다는 것입니다. 각 char형의 1비트 밖에 사용하지 않고 7비트트 * 8개(56비트)의

공간이 낭비되고있는 문제점입니다.

 

이 문제를 해결하기 위해서는 8비트를 사용하여 8개의 LED를 제어하는 방법을 사용하여야합니다.

char 형의 문자형을 하나 사용하여 8비트(1바이트) 공간을 사용하는 방법을 소개합니다.

이 문제를 해결하기 위해서는 비트연산자를 활용해 각 비트의 연산이 필요합니다.

 

1. AND연산

 

 

AND연산은 위 그림과 같이 1과 1이 입력될때만 1이 출력되고 그 외의 연산은 0이 출력되는 게이트를 말합니다.

 

2. OR연산

 

 

 

OR연산은 위 그림과 같이 0과 0이 입력될때만 0이 출력되고 그 외의 연산은 1이 출력되는 게이트를 말합니다.

(입력 게이트로 하나라도 1이 포함되면 1이 출력)

 

3. NOT연산

NOT연산은 위 그림과 같이 0을 NOT연산자를 취하면 1이 출력되고, 1을 NOT연산자를 취하면 0이 출력됩니다.(반대로 출력)

 

4. SHIFT 연산

  데이터 << 이동할 비트 수

 데이터 >> 이동할 비트 수

 

SHIFT연산은 메모리 상을 비트 단위로 이동하는 것을 말합니다. 데이터를 비트 단위로 좌, 우로 이동하는

기능을 합니다.

규칙1. 특정 비트를 설정하려면 OR연산자를 사용합니다.

 char mmio = 0; // 0000 0000

규칙2. 특정 비트를 검색하려면 AND연산자를 활용합니다.

규칙3. 특정 비트를 초기화하려면 &연산자와 비트 반전 연산자(~, NOT)을 사용합니다.

 

 

 

 

'프로그래밍 > C/C++' 카테고리의 다른 글

C++ 파일 입출력  (0) 2014.02.24
함수 주요 형태(_stdcall, _cdecl, _fastcall)  (0) 2014.02.24
함수 포인터  (0) 2014.02.12
[STL]컨테이너 선택  (0) 2014.02.09
[STL] 제네릭 알고리즘 Generic Algorithm  (0) 2014.02.09

함수 포인터

프로그래밍/C/C++ 2014. 2. 12. 04:22

우리가 알고있는 일반적인

함수의 선언은 리턴타입 (함수명 ([파라미, ...])) 형식을 갖습니다.

함수의 포인터 선언 방법은 함수의 심볼은 반드시 리턴 타입과 매개변수 사이에 위치해야 합니다.

함수의 포인터 선언은 리턴타입 (*포인터명) ([파라미터, ...]) 형식을 갖습니다.(괄호 필수,

미괄호시 파라미터 부터 해석해서 리턴타입을 리턴타입을 포인터로 리턴하는 함수로 인식합니다.)

함수호출, 함수의 포인터 호출 방법은 아래와 같습니다.

 


하지만 이러한 방법은 매우 복잡합니다. 함수의 포인터 호출 방법을 아무도 사용하지 않을 것입니다.

하지만 전처리기 #define문을 사용해 함수의 포인터를 간단히 치환할수 있습니다.

 

출력 결과

 called foo(10);

 called foo(10);

 called foo(10);

 called foo(10);

 

위의 주석으로 처리된 함수 포인터는 #define선언된 함수의 포인터 타입으로 변경되어 간단히 사용할수 있습니다.

좋은 프로젝트를 선정하는 방법?

카테고리 없음 2014. 2. 9. 14:55

좋은 프로젝트는 학습, 경험, 소비자가 좋아할만한 경험을 바탕으로 작성되어야 합니다.

애플의 아이폰과, 삼성의 갤럭시 시리즈를 보면 성능 면에서는 삼성의 갤럭시가 앞도적으로 우세합니다. 하지만

아이폰과 갤럭시는 비슷한 판매 실적을 올리고 있습니다.

 

여기서 보면 성능, 퍼포먼스 만으로는 승부하지 않는 것이 좋다는 지식을 얻을수 있습니다.  사용자가 필요한

기능에 초점을 맞추고, 본래의 기능을 충실히 수행하는 것 만이 사용자가 원하는 것임을 알수 있습니다.

어떤 분야에서 혁신적인 아이디어가 나와 기존의 기술을 덮어 버릴때 기존 사람들은 기존 기술의 불편함을 모르고

사용하다가 새로운 기술을 사용해보고 기존의 기술이 불편했음을 느끼는 경우가 많습니다. 예를 들면 옛날에는

문 키가 없으면 집에 들어가지 못해 기다려야 했지만, 당연하다고 여겼고, 현재는 문키를 번호키가 대신해 번호만

알아도 문 안으로 들어갈수있습니다. 기존의 기술이 불편하다고 생각하지 않고 당연한 결과라고 느꼈던 것입니다.

특정 주제를 선정했을때, 모든 사용자를 만족시키기는 매우 어렵습니다. 특정 사용자에게 초점을 맞추기는 쉽지만,

그 외의 사용자가 사용하지 못해 시장에서 경쟁력이 뒤쳐질 우려가 많습니다. 장단점이 있기 때문에 잘 고려해 선택

해야 할 것입니다.

 

 이를 감안해 주제를 선정했으면 선정한 프로젝트를 한장의 포스터와 15초 이내의 영상으로 표현할수 있고, 기능을

모르는 제 3의 사용자가 그것만을 보고 어떤 것인지 느낄수 있어야 합니다. 세부적으로 추가 설명이 필요할시 좋은 프로

젝트 주제로 선정된 것이 아닙니다. 

 

 기업은 사업성, 공헌성을 목표로 삼기 때문에 사업자에게 이득을 창출해 낼수 있는 교육 SW쪽으로 주제를 선정하는것이

좋을것입니다. 사회에 공헌(장애인, 노약자를 위한 서비스 제공)하는 주제를 선정하면 기업의 주목을 끌수 있을것입니다.

 

[Project Ideation]

주제를 선정하기 힘든 이유는 팀원의 부제, 퍼포먼스의 부족, 기술력 부족, 분량 조절 실패, 이미 나온것이 많음 등 여러

가지 원인이 있습니다. 따라서 아이디어 회의를 하기 위해 모여서 토론하는것보다 일상생활에서 문특 떠로은 item이

더 좋은 프로젝트 주제로 선정되는 경우가 많습니다.  브레인스토밍, 마인드맵, 아이디어 회의 등을 할때 특정 item에

대해 구체화 하는것은 좋지 않습니다. 특정 주제에 대해 구체화 하게 되면 그 주제를 벗어나기가 매우 어렵고 또한

새로운 주제가 떠오르지 않는 경우가 많기 때문입니다.

 

1. 기초적인 아이디어 기입

2. 마인드맵으로 가지치기

3. 아이디어 재정리

4. 다른 사람에게 피드백받기

5. 보고서 작성

 

[브레인 라이팅]

브레인 스토밍은 자유롭게 발언하는 것이 토대가 되어있지만, 실제로 그렇게 하기가 매우 어렵습니다.(일부 사람에게

집중) 그래서 독일을 호리겔은 발언을 하는 대신 종이에 기록하는 방법을 제안했습니다. 다시 말하자면 브레인 라이팅은

참가자들 끼리의 아이디어를 기록하기 위해 비언어적 접근 방법을 사용하는 아이디어 창출기법입니다. 브레인 스토밍

과 비슷하게 참가자들은 문제를 해결하기 위한 아이디어를 생각해 내고, 카드나 종이쪽지를 사용하여 기록한 후 한데

모아서 다른 사람의 것과 교환하여 검토합니다. 이러한 과정을 정기적으로 거치면 참가자들의 사물을 보는 시야의

범의를 높일수 있습니다. 참가자들은 분야는 다르더라도 사안에 관련된 배경지식을 가지고 있어야 합니다. 예를 들면

6명이 둥근 테이블에 둘러 앉아 5분 동안 3가지의 아이디어를 생각하는 방법입니다. 6명이 각각 1장의 종이를 가지고

5분간 3개의 아이디어를 써서 그것을 차례대로 옆사람에게 돌립니다. 30분간 6명이 각각 18개의 아이디어를 기록하므로

총 108개의 아이디어가 탄생합니다.

 

 

 

[연꽃 기법]

연꽃기법은 연꽃 모양으로 아이디어를 발상해 나가는 사고기법입니다. 주로 아이디어나 문제 해결의 대안을

다양한 측면에서 얻기 위하여 활용됩니다. 주로 기존의 기술이나 제품을 활용하여 새로운 방법을 찾으려고 할때나

미래 시나리오를 가상으로 만들어 내려고 할 때 적용됩니다. 연꽃 기법 방법은 3*3 칸으로 된 사각형을 중심으로

주변에는 사각형의 중심에 있는 가운데의 목표를 해결하고자 하는 키워드, 주제를 적습니다. 반복적으로 그 8개에 대한

주제를 또 8개의 키워드로 분할하는 방법입니다. 위의 결과 가운데를 중심으로 하나의 주제에 대한 하위주제의 적절한

아이디어를 조합하여 새로운 최선의 대안을 생각해 낼수 있습니다.

 

 

☞ 연꽃 기법 활용시 유의할점

  1. 비판금지 : 다른 사람들이 제시하는 아이디어를 절대로 평가, 비판, 간섭해서는 안됩니다.

  2. 자유 분방 : 아이디어가 비현실적일지라도 모두 받아들여야 합니다.

  3. 질 보다는 양 : 좋은 아이디어를 얻기 위해서는 가능한 많은 아이디어를 바탕으로 이끌어 내야 합니다.

  4. 결합과 개선 : 두 개 이상의 아이디어를 결합하거나 수정, 추가, 모방해서 새로운 아이디어를 만들수 있습니다.

 

 

 

 

[STL]컨테이너 선택

프로그래밍/C/C++ 2014. 2. 9. 14:12

컬렉션 내의 값들을 어떤 방식으로 접근하는가에 따라 컨테이너 선택이 달라져야 합니다.

 

▶ 컬렉션 내에 임의 접근이 자주 필요할시

    vector와 deque를 사용하고, 순차접근만으로 충분하다면 다른 컨테이너를 써도 무방합니다.

 

▶ 컬렉션 내의 값들을 순서 매길 필요가 있을시

    Set을 사용하는게 좋습니다. 매순간 순서가 필요없고 특정 순간에 필요하다면 list혹은 vector에 값을 대입하고 필요시

    정렬하는 방법을 사용하는 것이 좋습니다.

 

▶ 데이터 구조 내에서 유지되는 값들의 순서가 필요할시

     stack이나 list를 선택하는것이 좋습니다.

 

▶ 실행중에 데이터 구조가 광범위 하게 변활시

    list와 set을 선택하는 것이 좋습니다.  vector, deque는 컬렉션으로 부터 원소들을 제거한 뒤에 데이터 이동이

    이루어지기 때문에 부하의 원인이 됩니다.

 

▶ 어떤 값이 컬렉션 내에 포함되어 있는지 확인하는 빈도가 높으시

    set이나 map을 선택하는 것이 좋습니다.

 

▶ 컬렉션에 대해 인덱싱이 필요할시

    vector, deque를 사용하고, 키 값이 어떤 순서가 있는 데이터 형이라면(문자, 문자열, 사용자 정의 데이터 타입)

    map을 사용합니다.

 

▶ 두개 이상의 수열을 하나로 합치는 일이 자주 발생할 경우

    set이나 list가 유용합니다. 어떤 것을 선택할지는 순서가 유지되는가의 여부에 따라 결정하는 것이 좋습니다.

 

▶ 컬렉션 중간에서 데이터 삽입, 삭제가 자주 이루어질시

    list가 최선의 선택이며, 앞쪽에서 삽입된다면, deque , list 끝에서 삽입과 삭제가 이루어진다면 stack, deque를 사용하는 것이 좋습니다.

'프로그래밍 > C/C++' 카테고리의 다른 글

비트 연산자  (0) 2014.02.12
함수 포인터  (0) 2014.02.12
[STL] 제네릭 알고리즘 Generic Algorithm  (0) 2014.02.09
[STL] 정렬 컨테이너1 (set, multiset, map, multimap)  (0) 2014.02.09
[STL] 제네릭(generic) 기초 정리  (0) 2014.02.09