stl 구문인데 너무 어렵습니다. (제목 수정했습니다..)

assa의 이미지

정말...STL 사람잡는군요...

잠시도 가만있을수가 없으니 ㅠㅠ..

집에도 가야하는데.. (사설은 여기까지..)

int main(){
	multiset<char **> aaa;

	char *bbb= "bbb";
	char *ccc= "ccc";

	char **temp;
	temp= new char *[10];
	for(int i= 0; i< 2; i++){
		temp[i]= new char[10];
	}

	strcpy(temp[0], bbb);
	strcpy(temp[1], ccc);

	printf("%s", temp[0]);

	aaa.insert(temp);

	char **ddd;
	copy(aaa.begin(), aaa.begin(), &ddd);
	printf("%d", aaa.size());

	[b]printf("%s", ddd[0]);[/b]
	delete *temp;

	return 0;	
}

대충 보시면 아시겠지만.. multiset으로 선언한 aaa에
2차원 문자열 배열을 넣었습니다.

문제는 printf("%s", ddd[0]); 에서 NULL 참조가 일어나는데요.

어떻게 해야할지..막막합니다.

copy(aaa.begin(), aaa.begin(), &ddd);
이부분은 multiset으로 묶여진게 여러개가 있을경우 맨앞의 것을

취하겠다는 의미로 쓴것이며 &ddd 대신 ddd로 할때 에러가 나더
라구요( ... from char ** to char *)

책 2개를 붙잡고 이래저래 굴려봤지만... 차라리 물어보는게 더 나

을꺼 같아서 올립니다...

happyjun의 이미지

우선 공지글의 "글 주제가 내용을 반영하지 않으면 경고를 주겠습니다." 이라고 합니다.

==

그리고 죄송하지만 위의 프로그램은 아무 의미가 없습니다. 틀린 곳도 너무 많고 STL도 잘못 사용하고 있고 원래 원하시는 의미도 모르겠습니다.

그냥 원하시는 것을 말로 설명해 주시는 것이 정확한 답변을 드리기 쉽습니다.

----------------------------------------
http://moim.at
http://mkhq.co.kr

doldori의 이미지

STL에서 어떤 시퀀스의 범위는 [b, e)의 꼴입니다. b는 포함하고 e는 포함하지
않는 것이죠. 이에 따르면 [a.begin(), a.begin() )은 비어있는 범위가 됩니다.
따라서 copy(a.begin(), a.begin(), &ddd) 는 실제로는 아무 일도 하지 않습니다.
당연히 copy() 후에도 ddd는 초기화되지 않으므로 ddd[0]는 잘못입니다.
multiset의 처음 원소만을 꺼내고 싶다면 copy()는 적당하지 않습니다.
이렇게 하세요.

assert(!aaa.empty());
ddd = *aaa.begin();

* new는 두 번 했는데 delete는 한 번만 했군요.
** STL을 사용하시려면 질문/답변 식으로는 한계가 있고 책을 한 번쯤은 정독해야 합니다.

assa의 이미지

제가 보기엔 너무 어렵고, 특히 output에 대한 명확한 예제나 답이 없어서,

너무 힘이 듭니다..

다른 STL책을 추천해 주실순 없나요?

* 위의 예제는 그냥 sample로 짠거라 대충하느라고 for구문으로 메모리해제를

하지 않았습니다.. 메모리 해제보다는 multiset의 각 element에 대한 접근방법

이 너무 궁금했으니까요.. ^^;;

** 그리고 제가 생각했던 것은 한 key에 다수의 value (문자열 배열)를 넣을 수 있는 hash를 만들어야하는데 그리 쉽지가 않더군요.

map과 multimap에 대한 아리까리한 튜토리얼 설명(중복키 관련)때문에 어떻

게 해야 할지 모르겠더군요.. 그래서 이래저래 테스트겸 삽질을 하고 있었구요..

관련 함수나 STL을 찾아보니 , multi hash인가? 있기는 하던데.. 상용으로 사야

한다더군요.. M$ VC버전인 경우에는...ㅠㅠ

doldori의 이미지

David Musser의 STL Tutorial and Reference Guide를 보고 계시나요?
저는 읽어보지 않았지만 좋은 책으로 알고 있는데요. 예제 코드도 많이 실려 있고요.
비슷한 책으로는 Nicolai Josuttis의 The C++ Standard Library가 있는데
Musser의 책을 갖고 계시다면 따로 보실 필요는 없을 것 같습니다. 너무 조급하게
마음먹지 마시고 처음부터 천천히 보세요.

컴파일러는 MSVC++을 사용하시나 본데 .NET 7.1을 권합니다. 그 이전 버전은
템플릿 지원이 미흡하고 특히 6.0은 심각할 정도여서 예제 코드가 컴파일되지 않는
경우가 있을 것입니다.

지금 원하시는 컨테이너가 hash_multimap인 것으로 보입니다. 그런데 hash 기반
컨테이너는 표준 라이브러리에 없는 것입니다. 따라서 hash 컨테이너를 쓰면
이식성은 보장되지 않는다는 점을 주의하셔야 합니다. 그런데 이것들을 쓰려면
따로 사야 한다는 말은 처음 듣습니다. .NET에 포함된 라이브러리에도 있거든요.
다만 std가 아니라 stdext namespace에 들어 있습니다.
상용으로 구입해야 하는 것은 아마 Dinkumware의 STL일 것입니다.
반드시 hash 컨테이너를 써야 한다면 STLport도 좋은 방법입니다.
많은 플랫폼에 포팅되어 있어서 그나마 약간의 이식성이라도 얻을 수 있는 장점이 있습니다.

tinywolf의 이미지

SGI의 STL도 조아요~

ㅡ_ㅡ;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.