'stl'에 해당되는 글 4건

  1. 2008/01/14 stl 을 사용한 파서 구축하기 (펌)
  2. 2007/11/14 Vector를 사용할때 매번 하는 부분을 template로 대체해서 사용하장..!!
  3. 2007/09/18 STL 샘플 코드...강추!!!
  4. 2007/09/17 소멸자를 virtual로 ... (string 가 메모리 릭이 발생할때..) (2)
2008/01/14 09:33

stl 을 사용한 파서 구축하기 (펌)

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());
}
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2007/11/14 14:42

Vector를 사용할때 매번 하는 부분을 template로 대체해서 사용하장..!!

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;
};

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2007/09/18 10:30

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

STL 관련 괜찮은 샘플 코드가 있는 곳..
http://anaturb.net/C/stl_frame.htm


Vector                
Deque              
List                      
Set                      
Multiset          
Map                      
Multimap          
Stack                
Queue                
Priority_queue    

out_of_range            
invalid_argument  
length_error            
bad_alloc        
table            
description            
introduction      
description            
examples      
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2007/09/17 16:03

소멸자를 virtual로 ... (string 가 메모리 릭이 발생할때..)

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

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

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

앞으로는 조심조심. ^^..
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 2