Programming/C++ STL2013.01.06 23:28
템플릿을 이용하는건 제너릭 프로그래밍과 동일하지만
컴파일러에 조금더 의존을 해서, 최적화를 한다는데 자세한건 읽어봐야 할 듯

간략하게 한글 위키 내용을 요약하면,
factorial 같은 무거운 함수를 템플릿으로 작성하고
이걸 템플릿 메타 프로그래밍을 적용하면
factorial(N)에 대해서 컴파일러가 미리 처리해서
해당 값을 바로 리턴할수 있도록 컴파일 시간에 값을 정해버린다는 것.

엄청난 퍼포먼스 향상이 있을것으로 생각이 되지만...
컴파일러에 지극히 의존적이라 호환성이 떨어진다고 하니...

[링크 : http://ko.wikipedia.org/wiki/템플릿_메타프로그래밍]
[링크 : http://en.wikipedia.org/wiki/Template_metaprogramming]

[링크 : http://en.wikipedia.org/wiki/Generic_programming]

'Programming > C++ STL' 카테고리의 다른 글

C++ 첫걸음 *-_-*  (0) 2013.02.09
unsigned char -> int 변환 주의사항  (0) 2013.02.04
템플릿 메타프로그래밍  (0) 2013.01.06
c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2012.05.12 10:45
C++ 템플렛 관련 정리가 잘되어 있는 링크 발견!

[링크 : http://ikpil.com/category/IT책%20정리실/C++%20Template# ]

'Programming > C++ STL' 카테고리의 다른 글

unsigned char -> int 변환 주의사항  (0) 2013.02.04
템플릿 메타프로그래밍  (0) 2013.01.06
c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2011.10.13 22:12
두줄 넣으면 해결!

#include <cstring>
using namespace std;

[링크 : http://stackoverflow.com/questions/2220795/error-strcpy-was-not-declared-in-this-scope]

'Programming > C++ STL' 카테고리의 다른 글

템플릿 메타프로그래밍  (0) 2013.01.06
c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2010.09.16 10:07
new와 delete,
new[] 와 delete[] 가 묶여야 한다고 한다.

즉,
 int *a = new int;
 delete a;

 int *arr = new int[10];
 delete[] arr; // delete arr[]; 이 아님

그렇다고 해서 링크드 리스트 처럼 다층으로 메모리를 할당하는 구조에서는
delete[] 가 자동으로 해주진 않는것으로 보인다.
(그냥 STL 쓰면 해결된다는 지인의 조언이 -_-)

[링크 : http://yesarang.tistory.com/39]

'Programming > C++ STL' 카테고리의 다른 글

c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
Posted by 구차니

댓글을 달아 주세요

  1. 전 new 하면 html 에서 새로운 창 띄우기 밖에 모른다는 ㅎㅎ

    2010.09.16 11:12 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 배열은 특별한 경우를 제외하고는 vector로 거의 대체 할수 있다고 생각하시면 되요.
    NULL 초기화와 SafeDelete 매크로 사용을 습관화 하는것이 좋아욤~

    2010.09.16 15:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 음.. 일단 STL은 너무나 먼 당신이라 ㅋ
      C와 C++의 차이점부터 파악중이에요 ㅎ

      SafeDelete라.. 찾아볼께 자꾸만 많아지네요 ㅠ.ㅠ

      2010.09.16 15:52 신고 [ ADDR : EDIT/ DEL ]

Programming/C++ STL2010.09.16 09:35
cout을 쓰려면
#include <iostream>
using namespace std;
두개를 써야 한다고 했는데, 문득 아래를 안쓰면 어떤 에러가 날지 궁금해졌다.

 error C2065: 'cout' : 선언되지 않은 식별자입니다.
음.. 역시 namespace가 다르니 인식을 하지 못하는 건가?

물론
std::cout << "Hello World";
라고 namespace를 직접 입력해주면 에러없이 실행이 가능하다.

[링크 : http://en.wikipedia.org/wiki/Namespace]

'Programming > C++ STL' 카테고리의 다른 글

리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2010.09.15 13:06
int& a;
요 &가 바로 레퍼런스 변수이다.
어떻게 보면 포인터와 비슷하지만, 다른 녀석이고, C++ 공부중에 함수 인자에서 혼동을 느끼게 한 녀석이다.

// more than one returning value
#include <iostream>
using namespace std;

void prevnext (int x, int& prev, int& next)
{
  prev = x-1;
  next = x+1;
}

int main ()
{
  int x=100, y, z;
  prevnext (x, y, z);
  cout << "Previous=" << y << ", Next=" << z;
  return 0;
}

[링크 : http://www.cplusplus.com/doc/tutorial/functions2/]
[링크 : http://www.cplusplus.com/doc/tutorial/pointers/]

위의 소스중, prevent() 함수의 두/세번째 인자가 바로 reference 변수인데,
C에서는 당연히 포인터로 넘겨주어야 할꺼라고 생각을 했는데,
C++에서는 변수를 그냥 인자로 취해줌에도 불구하고 원본의 값이 바뀐다.
(당연히.. 레퍼런스 변수란걸 모르니 이상하게 보일수 밖에 ㅠ.ㅠ)

처음에는 자동형변환과 연관이 되어있나 했는데.. 그거랑은 거리가 좀 있는것 같고
그냥 단순히 C++ 문법적 특성으로 "참조형 변수" 라고 생각중 -_-

C++ 참조와 포인터의 차이점
- 만들어지면 값 변경불가
- 위의 이유로 null로 선언불가

C++ references differ from pointers in several essential ways:

  • It is not possible to refer directly to a reference object after it is defined; any occurrence of its name refers directly to the object it references.
  • Once a reference is created, it cannot be later made to reference another object; it cannot be reseated. This is often done with pointers.
  • References cannot be null, whereas pointers can; every reference refers to some object, although it may or may not be valid.
  • References cannot be uninitialized. Because it is impossible to reinitialize a reference, they must be initialized as soon as they are created. In particular, local and global variables must be initialized where they are defined, and references which are data members of class instances must be initialized in the initializer list of the class's constructor. For example:

[링크 : http://en.wikipedia.org/wiki/Reference_%28C%2B%2B%29]

[링크 : http://hijacker.egloos.com/1379523]
[링크 : http://www.cprogramming.com/tutorial/references.html]



'Programming > C++ STL' 카테고리의 다른 글

new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
Posted by 구차니

댓글을 달아 주세요

  1. 요게 덩치큰 변수들을 함수 인자로 넘겨줄때 유용해요.
    구조체 같은거 넘겨 줄때 &로 받으면 포인터만 복사되기때문에 비용이 저렴하지요.

    struct foo { int a; double b; float c; }

    void boo( foo& value )
    { // Do Something }

    void main()
    {
    foo dummy;
    boo( dummy );
    }

    전 요런식으로 자주 써욤~
    주의 할건 인자가 변경되면 원본도 변경되니 변경을 원하지 않으면 const를 꼭 붙여야 한다는 것~

    2010.09.15 15:21 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 아무튼 C만 쓰다보니 C++ 문법이 정말 어색한게 많네요 ㅎ
      좋은 지도감사합니다 ㅋ

      음.. 근데 const 쓰면 에러가 나지 않나요 ㅎ

      2010.09.15 15:47 신고 [ ADDR : EDIT/ DEL ]
    • 값이 변경되는 것을 원치 않을 때 (단순 참조용 일 때) 붙이는거죠.
      void boo( const foo& value );
      요렇게요~ 'ㅂ'
      본문의 예제처럼 수정하는거면 그냥 const 없이~

      전 오히려 C++ 방식에 너무 길들여져서 C쪽이 더 낯설어여...

      2010.09.15 17:28 신고 [ ADDR : EDIT/ DEL ]
    • 요즘에는 차라리 처음부터 C++이나 JAVA 로 배웠으면 어땠을까 라는 생각을 하곤 한답니다 ㅋㅋ

      처음에 C로 시작을 하니, C스러운 사고를 하게되요 ㅠ.ㅠ

      2010.09.15 17:52 신고 [ ADDR : EDIT/ DEL ]

Programming/C++ STL2010.09.15 10:19
C99 이런것들 처럼 C++에 대한 표준안이지만 현재로서는 비공식 표준이다.
친구로는
C++98 (1998년 제정 표준)
C++03 (2003년 제정 표준)이 있다.
[링크 : http://en.wikipedia.org/wiki/C%2B%2B98#Language_standard]

[링크 : http://ko.wikipedia.org/wiki/C%2B%2B0x]
[링크 : http://en.wikipedia.org/wiki/C%2B%2B0x]

'Programming > C++ STL' 카테고리의 다른 글

cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
Posted by 구차니
TAG C++0x

댓글을 달아 주세요

Programming/C++ STL2010.09.13 14:02
VC6.0 프로젝트를 VS2010으로 이전하다가, 코드는 아래와 같은데
std::vector<vectoriter>::iterator iter;
            vectoriter *pch = iter;

이런 에러가 발생이 되었다.
 error C2440: '초기화 중' : 'std::_Vector_iterator<_Myvec>'에서 'vectoriter *'(으)로 변환할 수 없습니다.

STL의 vector를 사용하는데, 어짜피 이녀석도 array로 호출은 되지만,
포인터 레벨의 차이인지 에러를 출력한다.
The usual way is &v[0]. (&*v.begin() would probably work too, but I seem to recall there's some fluffy wording in the standard that makes this not 100% reliable)

[링크 : http://stackoverflow.com/questions/1388597/stdvector-and-c-style-arrays]

 vectoriter *pch = &iter[0]; // no error
 vectoriter *pch = &iter; // error
흐음.. vector.begin() 역시 [0]과 같은 의미인것 같으나.. 여전히 템플릿은 머가먼지... OTL

'Programming > C++ STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
STL 그리고 Template  (0) 2010.09.09
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2010.09.09 15:12
음.. 예전에 어떤 분의 블로그에서 스마트 포인터 란것을 들었지만
어떤건지 알지 못했는데 C++/STL 공부하면서 문득 떠올라 검색을 하니 아래와 같이 상큼하게 정의가 내려져있다.

C++은 자바와 같은 가비지 컬렉션(GC) 기능이 없어서,
new로 동적 할당한 객체를 매번 delete를 써서 수동으로 삭제해야 하는 건 아실 겁니다.
조심하지 않으면 엄청난 메모리 누수(leak)가 나버리는 버그가 발생할 가능성이 있죠.
(이런 버그를 잡기위해서 바운즈 체커나 코드 가드와 같은 프로그램이 나온거죠.)

....

부스트 라이브러리의 스마트 포인터에 대한 문서는 다음 링크를 참고하세요.
http://boost.org/libs/smart_ptr/smart_ptr.htm
http://boost.org/libs/smart_ptr/shared_ptr.htm

위의 예제를 boost::shared_ptr을 써서 고치면 다음과 같습니다.

void doSomething()
{
  typedef boost::shared_ptr<Widget> SPW; // "Shared_Ptr to Widget"
  vector<SPW> vwp;
  for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
    vwp.push_back(SPW(new Widget));
  ...
} // vwp가 스코프에서 벗어나는 순간, 자동으로 메모리를 해제합니다.


[링크 : http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=22740]

간단하게 말하자면, free() 를 알아서 해주는 일종의 "프레임웍"이나" 라이브러리"라는 의미.

머.. 그래도 인간이 직접 적절하게 free() 해주는게 장땡인듯 -ㅁ-
[링크 : http://www.iamcorean.net/131]

'Programming > C++ STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
STL 그리고 Template  (0) 2010.09.09
Posted by 구차니

댓글을 달아 주세요

  1. 제 프로젝트에는 직접 구현해서 쓰는데 서로 가리키는 문제만 안내면... 정말 요긴하게 쓰여요.
    아무래도 일일히 new delete 해주는건 깜밖 잊었다간 메모리 누수가 와장창 나기 때문에... ( 나중에 찾기도 힘듬 ).
    특히 게임쪽에는 정말 요긴하죠. 텍스쳐나 메시 같은 자원나 씬그래프 노드 관리를 스마터 포인터로 자동화 해제 해두면+_+)b 라능~

    2010.09.10 08:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 확실히 메모리 누수가 생기면 대략 난감하죠 ^^;
      저야 임베디드 분야라서 누수가 좀 치명적인데 그거보다 치명적인건 바로 메모리 침범이죠 ㅋ

      valgrind 이녀석도 한번 익혀봐야 하는데 영 손이 안가네요 ㅠ.ㅠ

      2010.09.10 08:53 신고 [ ADDR : EDIT/ DEL ]

Programming/C++ STL2010.09.09 11:12
winapi.co.kr 의 주인장은.. 영자 사기캐릭 스멜이 자꾸만 난단 말이지..
아무튼 뜬금없이(!) C++ 공부중!

[링크 : http://winapi.co.kr/]
    [링크 : http://winapi.co.kr/clec/cpp3/cpp3.htm]
[링크 : http://www.cppreference.com/wiki/start]
[링크 : http://www.cplusplus.com/reference/]

'Programming > C++ STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
STL 그리고 Template  (0) 2010.09.09
Posted by 구차니

댓글을 달아 주세요

  1. 전 C언어 독학으로 배웠는데... winapi 이곳에서 엄청 많은 시간을 보냈죠.
    최근도 가끔 들르면서 아리송까리송 한거 확인한다는...

    2010.09.09 14:49 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 이번에 보니.. 안드로이드도 책 내셨더라구요 -ㅁ-
      김상형 님은.. 영자캐릭인듯...


      음.. 독학이라니 대단하세요 ㅠ.ㅠ
      전학교에서 배우고 나머지는 독학이긴 하겠지만..
      많이 부족해요. 티스님이 가르쳐 주세요!

      2010.09.09 14:56 신고 [ ADDR : EDIT/ DEL ]
    • 윽.. 저도 못 해요 ㅜㅠ

      2010.09.09 15:29 신고 [ ADDR : EDIT/ DEL ]
    • 자자 티스님 100대만 맞고 시작을 응? ㅋㅋㅋㅋ
      부스트 라이브러리도 티스님꺼에서 봤는데 이러시면 안돼요! ㅋ

      2010.09.09 15:37 신고 [ ADDR : EDIT/ DEL ]