GSI

stl을 사용해서 문자열의 토큰을 처리 하는 클래스 입니다.
물론 펌 입니다.
출처 : http://blog.naver.com/inobae?Redirect=Log&logNo=90025826561

사용법은 아래와 같아요.

1. 파싱할 sample.txt 파일

슈퍼맨, 2000, 23.5
홍길동, 3000, 45,6

2. 같은 형태의 포멧을 가진 txt 파일이 있을때
    아래와 같이 우선 파일을 로드 합니다.

ifstream file;
file.open("sample.txt");

3. 해당 파일을 한줄 단위로 읽습니다.
   그리고 나서 StringToKenizer 클래스를 사용해서 파싱합니다.

char buf[1024];
while(!file.eof())   // 다 읽었다면 빠져 나간다.
{
  // 한줄당 읽어 들입니다.
  file.getline(buf, 1024);

  // 토큰 분리
  StringTokenizer st = StringTokenizer(buf, ",");

  // 파싱된 문자열을 해당 값에 따라서 저장하면 됩니다.
  string name = st.NextToken();
  double value0 = atof(st.NextToken().c_str());
  double value1 = atof(st.nextToken().c_str());
}
Posted by gsi
:

vector를 사용해서 객체를 저장할때 포인터 형으로 하게 되면
메모리 누수를 막기 위해서 객체를 항상 Delete 해줘야 한다.
솔직히 매번 Add, Delete, DeleteAll 등을 해줘야 하는 불편함이 전(??) 있었다. ^^
그래서 템플릿으로 하나 만들었다.
for-each 이건.. 왜 안되는지 ^^.. 암튼.. 현재걸로 조금 우선 사용해보자.

// 사용법 //
CGsiV<CTest> VectorArray;
VectorArray.Add(new CTest());
int size = VectorArray.GetVector()->size();

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// CGsiV
template <class T>
class CGsiV
{
public:
 CGsiV() {
  m_v.clear();
 }

 virtual ~CGsiV() {
  DeleteAll();
 }

 // Add
 void Add(T* t) {
  m_v.push_back(t);
 }

 // Delete
 bool Delete(T* t) {
  T* p;
  vector<T*>::iterator iter;
  for(iter = m_v.begin(); iter != m_v.end(); ++iter) {
   p = (*iter);
   if(p != NULL && p == t) {
    delete p;
    p = NULL;
    m_v.erase(iter);
    return true;
   }
  }
  return false;
 }

 // DeleteAll
 void DeleteAll() {
  T* p;
  vector<T*>::iterator iter;
  for(iter = m_v.begin(); iter != m_v.end(); iter++) {
   p = (*iter);
   if(p != NULL) {
    delete p;
    p = NULL;
   }
  }
  m_v.clear();
 }

 //GetVector
 vector<T*>* GetVector() { return &m_v; }

protected:
 vector<T*> m_v;
};

Posted by gsi
:

STL 샘플 코드...강추!!!

STL 2007. 9. 18. 10:30 |

Posted by gsi
:

가끔 어이 없는 실수를 할때가 ^^..

stl::string 를 사용해서 문자열을 받는 곳에서 메모리 릭이 발생!!
아.. 어디지?.. 이게 왜 릭이 생기지?..

상속 구조를 취하게 되었을때 소멸자를 virtual로 해주어야 하는 것을 깜박 했다.

앞으로는 조심조심. ^^..
Posted by gsi
: