Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[4807] [질문] for_each 구문에 대해서 ...
진수.네모 [miman101] 1485 읽음    2004-11-30 13:46
안녕하세요 진수.네모입니다.

여러 문자열을 받아 들여 그 주위에 별표를 둘러 씌우는 것을 STL을
이용하여 짜보고 있답니다.

아직 C 에 너무 길들여져 있어 힘이 드네요..

vector<string> Article; 에 글이 들어 있답니다. 우선 가장 긴 문자열을
찾아야 하는데.. for_each 를 쓰고 싶은데.. 이게 참 문제가 있네요...

함수를 써보았다가.. 그 크기를 저장할 수 가 없어서 객체로 바꾸어 봤답니다.
하지만.. 그것도 문제가 발생하더군요..
for_each 에서 객체를 생성했다가 소멸 시켜 버리는 바람에 애써 찾아낸
MaxLen 값을 쓸수가 없더군요...

여기서 잠시 이상한 점은 생성자는 한번 호출 되는데 소멸자는 두번 호출되네요
만약 메모리 해제를 두번시도한 다면 에러가 발생할텐데...

왜 소멸자가 두번되는지 궁금합니다.
MaxLen 의 값을 for_each를 사용하여 구할수 있나요..
아니면 다른 알고리즘이라도.. ^^

그럼 좋은 하루 되세요.

#include <iostream.h>
#include <cstring.h>
#include <vector.h>
#include <algorithm.h>
//---------------------------------------------------------
vector<string> InputArticle(istream &is);
vector<string> MakeInBox(const vector<string> &);
void Display(const vector<string> &);
//---------------------------------------------------------
class Longest
{
public:
    Longest():MaxLen(0) { cout << "생성자 호출" << endl; }
    ~Longest() { cout << "소멸자 호출 " << endl; }
    int operator()(string );
    void display() { cout << MaxLen << endl; }
private:
    unsigned int MaxLen;
};
//---------------------------
int Longest::operator()(string str)
{
    string::size_type len = str.size();

    if(MaxLen < len)
        MaxLen = len;

    return MaxLen;
}
//---------------------------------------------------------
int main()
{
    vector<string> BoxStr;

    BoxStr = MakeInBox(InputArticle(cin));
    Display(BoxStr);

    return 0;
}
//---------------------------------------------------------
vector<string> InputArticle(istream &is)
{
    vector<string> Article;
    string str;

    cout << "Please,enter the article\n>> " ;
              
                // 입력 종료는 ctr+z
    while(getline(is,str))
    {
        Article.push_back(str);
        cout << ">> ";
    }

    return Article;
}
//---------------------------------------------------------
vector<string> MakeInBox(const vector<string> &Article)
{
    vector<string> ret;
    int MaxLen;


    for_each(Article.begin(),Article.end(), Longest());
   
    return ret;
}
//---------------------------------------------------------
void Display(const vector<string> &strInBox)
{
    vector<string>::const_iterator i;

    for(i = strInBox.begin() ; i != strInBox.end() ; i++)
    {
        cout << *i << endl;
    }
}
//---------------------------------------------------------

+ -

관련 글 리스트
4807 [질문] for_each 구문에 대해서 ... 진수.네모 1485 2004/11/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.