:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/07/22 14:41
질문에 대한 해답은 아니지만 요즘 STL 관련 질문을 자주 올리시는데요.
현업(?)에서는 STL을 그렇게 자주 사용하지는 않는 것 같습니다. 오히려 C++은 사장될 것이라고 말하는 교수도 있는 상황이고요. 템플릿과 STL을 중점적으로 공부하시는 것 같은데 세부적인 것이 나올 때마다 질문을 하는 것도 좋지만 STL관련 책을 한 번 읽어보심이 어떨까요? Effective STL 을 추천합니다. 이미 읽어보셨다면 뻘답글이 되겠군요...;
09/07/22 15:01
MoreThanAir님// 현재 공부하고 있는 책은 Essential C++ 로 공부중이고요,
목적은 3D 그래픽을 하는데 필요한 Mesh Library 중의 하나인 OpenMesh 를 Maya API 와 연동시키기 위함에 있습니다. 그래서 OpenMesh 가 제공하는 다양한 함수들을 Maya 에서 자유롭게 사용할 수 있도록 해야 하는데 먼저 C++ 에 대한 이해가 선행되어야 하기 때문에 1주 안에 책 한권을 마스터하다시피 해야 해서;;; 좀 무리하게 질문글을 올리고 있습니다. STL 에 대한 공부는 따로 시간을 들여서 더 해야겠군요... 질문글을 올리면서도 죄송하다는 마음 가득입니다.
09/07/22 15:10
DEICIDE님// 시간이 촉박할 때는 느긋하게 따로 공부하기가 힘들죠... 씨++을 일주일 안에 모두 이해한다라... 좀 무리한 목표인 것 같습니다. 워낙 개념들이 복잡해서 말이지요. 하시는 일 성공하시고 시간 나면 따로 한 번 공부해 보세요-
09/07/22 15:23
iterator 만으로는 어떤 container 소속인지 모릅니다. .erase 를 실행시키려면 당연히 그 본체 (여기서는 vec2) 도 파라미터로 전달해 줘야 합니다.
template<typename container, typename Comp> container sub_vec( const container& ) // 세부코딩 main() //~~~ vector<int> vec2 = sub_vec< vector<int>, greater<int> >( vec ); 해주면 끝날 것 같은데요?
09/07/22 15:30
STL 유용합니다. 그리고 현업에서 많이 쓰입니다. 최소한 STL 을 상속하거나 비슷하게 만든 라이브러리들 많이 씁니다.
따라서 STL 의 기본 개념을 알아서 손해볼 것 없습니다. C++ 이 사장될거라는 건 금시초문이네요. 이 세상에 C++ 로 짜놓은 라이브러리가 얼마나 많은데... 최소한 15년은 쓸겁니다. 이펙티브 STL 은 STL 을 어느정도 알아야 볼 수 있는 책입니다. 이거로 STL 에 입문할 수는 없습니다. 이펙티브 씨리즈들이 다 그래요. STL 기본서로 먼저 공부하신 후 읽으세요.
09/07/22 15:37
각자 주력언어가 있는것이고 IT업계도 각각의 부류 및 주류가 있는법이라
어떤 언어가 사장될것인다.. 하는 설은 대부분 그쪽 업계에"만" 통용될 수 있다 생각합니다. 저는 GIS업계에서 일하는데 MFC위주로 하던게 요즘은 웹쪽으로 넘어가는 추세구요 그 외에 C도 쓰고 이것저것 하고있습니다. 어떤언어던간에 주력언어를 정하시고 매진하시면 어딜가도 좋은 대접받으실수있을거라 생각합니다.
09/07/22 16:42
XEEN님// 좋은 말씀과 정보 감사합니다.
그런데 염치없지만 사실 아직도 정확하게 이해가 가질 않네요. 'template 으로 벡터를 받아서, 이것을 일정부분 삭제하고 다시 반환한다' 를 sub_vec 안에서 실행하기가 아직도 참 애매합니다; 조금 더 공부해보도록 하겠습니다.
09/07/22 17:19
저도 씨++을 가장 좋아하고 씨++의 그 많은 우아한 개념들을 무척 좋아합니다.
그래서 그 교수의 이야기가 그다지 달갑지는 않았습니다만... 제가 CS 석사 생활을 수년 간 하면서 씨++로 진행하는 수업은 해 본 적이 없습니다. 현업이라고 한건 최근의 석사 과정을 좀 오버해서 나타낸 말이고... 진짜 '현업' 필드에서는 아직까지 여러 언어가 많이 사용되겠죠. 하지만 핵심 코어에서는 씨++을 거의 쓰지 않습니다. 핵심 코어라는 것은 데이타베이스, 네트워크, OS 등등의 최신 프로젝트를 말합니다. 물론 자바, 포트란, 그 외의 여러가지 웹 언어들은 발붙일 틈도 없지요. 리눅스 자체가 씨를 기반으로 한 시스템이고 대부분의 최신 프로젝트가 그 기반 위에서 움직이는지라 씨 말고는 도태되어 가는 느낌이 있습니다.
09/07/22 18:10
DEICIDE님// 솔직히 정확히 어떤 걸 원하시는 지 잘 모르겠습니다. vec2 를 써 놓으셨길래 리턴값으로 새로운 vector 를 받기를 원하시는 줄 알았네요. vec 을 받아서 그 놈을 직접 수정하길 원하시나요? 그러면 그냥 아래처럼 하시면 됩니다.
template<typename container, typename Comp> void sub_vec( container& c ) // 세부코딩 c.dosomething(); main() //~~~ sub_vec< vector<int>, greater<int> >( vec ); c. 후에 어떤 함수 (정의되어있지 않더라도)가 오던 컴파일 에러는 발생하지 않습니다. 템플릿의 장점이자 단점이죠. 실질적으로 vector 를 받는다기 보다는 어떤 container 도 받을 수 있으므로 generic 하게 되죠. 원하시는 답변인지는 모르겠지만...
09/07/22 18:56
음 그러니까 제가 생각한 개념은
step1) vec 을 받아오는데, sort() generic algorithm 을 사용하기 위해 vec.begin() 과 vec.end() 를 iterator 로 받아옵니다. step2) 그리고 find_if() 를 사용해서 정렬된 값에서 사용자가 입력한 일정한 값을 찾습니다. step3) 그 뒤의 값을 전부 지워줍니다. step4) 그리고 나머지 벡터를 넘겨주어 출력합니다. vec2 를 쓴 것은 step4) 에서 vec2 로 .push_back() 하는 방법으로 데이터를 밀어넣어 주려는 의도였습니다. 미리 벡터의 크기를 정해놓지 않아도 되게끔 말입니다. 그런데 좀 어렵게 느껴지는게 step3) 에서 값을 지워주는 부분이 잘 안되네요; 제가 일단 한번 더 해보겠습니다.
|