STL과 C++은 일심동체?

lacovnk의 이미지

stl은

http://oopsla.snu.ac.kr/~sjjung/stl/wha_6844.htm

여기를 참고해보면, 표준 c++ library의 일부인데,

그렇다면, c++이 포팅된 환경은 모두 stl이 사용가능하다고 보면 되는 것일까요?

혹시 경량화를 위해서, stl은 빠지거나.. 그런 경우도 있나요?

ANSI C/C++로 코딩하라고 하면서,

Quote:
STL, ATL, COM, MFC 등의 library 만 이용하지 않으면 괜찮습니다.

라는 답변을 들었는데, 나머지는 그렇다 치고, STL은 어째서! 라는 궁금증이 생깁니다 -o-

STL을 쓰게 해달라고 요청할 참인데.. 어떻게 말씀 드리면 될까요?

lifthrasiir의 이미지

lacovnk wrote:
stl은

http://oopsla.snu.ac.kr/~sjjung/stl/wha_6844.htm

여기를 참고해보면, 표준 c++ library의 일부인데,

그렇다면, c++이 포팅된 환경은 모두 stl이 사용가능하다고 보면 되는 것일까요?

혹시 경량화를 위해서, stl은 빠지거나.. 그런 경우도 있나요?

ANSI C/C++로 코딩하라고 하면서,

Quote:
STL, ATL, COM, MFC 등의 library 만 이용하지 않으면 괜찮습니다.

라는 답변을 들었는데, 나머지는 그렇다 치고, STL은 어째서! 라는 궁금증이 생깁니다 -o-

STL을 쓰게 해달라고 요청할 참인데.. 어떻게 말씀 드리면 될까요?

일단 STLport 같은 걸 쓰면 어느 곳에서나 STL을 쓸 수 있습니다. 원래 STL은 C++로만 구현되니까요. 하지만 자료 구조 구현 같은 경우 STL을 쓰면 문제가 너무 쉬워지고 원래 목적에 어긋나므로-_- STL도 허용하지 않는 게 맞을 겁니다. 무슨 문제길래 그런 답변을 들으신 건지요?

- 토끼군

lacovnk의 이미지

자료구조를 구현하는게 목적이 아닌데..

간단하게 말하면.. 간단한 한자 인식 프로그램입니다. 핸드폰에 올라갈 것을 염두에 뒀는지, 외부Library를 사용하지 말라고 했습니다. 처음엔 ANSI C라고 -o-

다시 물어봤더니, C++은 되는데, 조건이 저렇게 달려왔습니다. 윽..

뭐 복잡한 것은 안쓰겠지만, vector는 필요할 것 같은데.. 간단하게 구현해서 써야하나, 고민중입니다.

음. 이유를 더 여쭤볼까나..

어째서! 어째서! 어째서! 흑흑 ㅠㅠ

purewell의 이미지

lacovnk wrote:
자료구조를 구현하는게 목적이 아닌데..

간단하게 말하면.. 간단한 한자 인식 프로그램입니다. 핸드폰에 올라갈 것을 염두에 뒀는지, 외부Library를 사용하지 말라고 했습니다. 처음엔 ANSI C라고 -o-

다시 물어봤더니, C++은 되는데, 조건이 저렇게 달려왔습니다. 윽..

뭐 복잡한 것은 안쓰겠지만, vector는 필요할 것 같은데.. 간단하게 구현해서 써야하나, 고민중입니다.

음. 이유를 더 여쭤볼까나..

어째서! 어째서! 어째서! 흑흑 ㅠㅠ

STL 나름대로 해결책이 있긴 하지만,
잘못 쓰면 소소한 녀석 컴파일했는데
대대한 녀석이 나올 수 있습니다.
(전문 용어가 있던 거 같았는데 모르니 대충 그까이꺼 넘어갑니다)

대대한 녀석 나오면 손전화에 올리기
거시기하죠.

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

lacovnk의 이미지

template 역시 그런 뻥튀기 효과가 심한가요?

것 까지 물어볼까 하는데 -o- 안된다고 할까봐 걱정이 됩니다 ㅎ

익명 사용자의 이미지

한가지 템플릿 클래스(or 함수 등등..)에 여러 타입을 인자로 넣어 사용할 경우 해당 타입마다 바이너리가 따로 나온다고 생각하시면 됩니다.

A<float> f;
A<double> d;
A<int> i;

이런식으로 사용한다면 대략 3배의 실행파일 크기 증가가 일어나겠죠.
(실행파일 전체 바이너리 크기 세배가 아니라 해당 클래스 바이너리 크기의 3배..)

죠커의 이미지

A_float과 A_double과 A_int를 만드는 것이나 template <typename A> class A를 만드는 것이나 거의 비슷한 코드를 냅니다.

A클래스 하나만으로 제너릭한 접근이 가능하다면 모를까 일반적으로는 크게 의미 없는 우려가 아닌가 생각합니다.

익명 사용자의 이미지

개발하시는 환경..그리고 타겟 플랫폼이 어떤지는 모르겠지만...
프로젝트에 따라 극히 환경을 제약하는것이 의미있는 경우가 있습니다.
확실히 그런 경우라면 내려온 방침에 따르는것이 좋겠죠.

하지만, 별로 그런 경우가 아니라면 한번 건의해볼 필요가 있겠습니다.
그저 여태까지의 관행이 그랬기 때문에 그렇다..내지는
외부라이브러리를 믿지 못하겠다..(검증이 안되어 있다) 같은 이유라면
실질적으로 STL사용은 별 문제가 되지 않을것 같네요.

죠커의 이미지

정말로 뻥 튀기가 걱정되시는 분들은 (물론 미신이 아니라 실제 결과를 본 후에 이야기 입니다.) 아래의 방법을 생각해 보세요.

template<class T> class Vector<T*>:private Vector<void*> {
public:
    typedef Vector<void*> Base;
    Vector() {}
    explicit Vector(int i):Base(i) {}
    T*& elem(int i) { return reinterpret_cast<T*&>(Base::elem(i)); }
    T*& operator[](int i) { return reintepret_cat<T*&>(Base::operator[](i)); }
};

템플릿의 뻥 튀기에 대한 걱정은 대부분 이른 공간최적화에 해당하고 대부분의 상황에서는 해결이 가능할 것입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.