STL 제네릭 알고리즘 정리

accumulate()
기본적으로, 컨테이너의 요소들을 세 번째 인수로 지정한 초기값에 모두 더합니다. 기본 덧셈을 오버라이딩하기 위해 이항 연산을 넘길 수 있습니다.

#include <numeric>

iresult = accumulate(ia, ia + 9, 0);
iresult = accumulate(ilist.begin(), ilist.end(), 0, plus<int>());

adjacent_difference()
기본적으로 주어진 열 내에서 인접하는 각 요소의 차이를 값으로 하는 새로운 열을 생성합니다. {0, 1, 1, 2, 3, 5, 8}이 주어진다면 그 결과는 {0, 1, 0, 1, 1, 2, 3}이 됩니다. 기본 뺄셈을 오버라이딩하는 이항 연산을 넘길 수 있습니다. 예를 들면, times<int>는 {0, 0, 1, 2, 6, 15, 40}이라는 결과를 도출합니다. 세 번째 인수는 결과가 복사될 컨테이너를 가리키는 반복자입니다.

#include <numeric>

adjacent_difference(ilist.begin(), ilist.end(), iresult.begin());

STL string_split()

inline void string_split(const std::string& c_st_parent, const std::string& c_st_sep,
std::vector<std>* pvec_st_child)
{   
  string::size_type base = 0;
  string::size_type end = 0;
  string::size_type sep_len = c_st_sep.length();

  pvec_st_child->clear();
   /* pvec_st_child->reserve(16); 적당한 크기로 공간을 예약해 주면 좋겠죠 : ) */ 
  while ( (end = c_st_parent.find_first_of(c_st_sep, base)) >= 0)
  {
   pvec_st_child->push_back(c_st_parent.substr(base, end - base));
   base = end + sep_len;
  }
   pvec_st_child->push_back(c_st_parent.substr(base, end - base));
  }

AUTOEXP.dat활용하여STL사용시디버깅조금더쉽게하기

이 후 부터는 VC6 이 “C:\Program Files\Microsoft Visual Studio” 에 설치되었다고 가정합니다. 따라서 MSDEV.exe 파일은 “C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin” 에 위치하게 됩니다.

 

VC6의 MSDEV.exe 파일이 있는 폴더에는 AUTOEXP.dat 란 파일이 존재합니다.

 

AUTOEXP.dat 파일은 툴팁에서나 디버그 Watch 창에서 해당 변수의 내용을 어떻게 표시할 지를 사용자가 결정할 수 있게 해줍니다.

 

간단하게 예를 들어서 MFC의 CPoint 형 변수를 디버그 Watch 창에 추가하면 오른쪽에 결과로 “{x=100 y=200}” 과 같은 형식으로 표시가 됩니다. 또는 디버깅 시 해당 변수위에 마우스 커서를 올려놓고 잠시 기다리면 나오는 툴팁에서도 똑같은 결과가 표시됩니다.

 

AUTOEXP.dat 파일을 열어보면 기본적으로 ” CPoint =x=<x> y=<y> ” 라는 아이템이 있습니다. 즉

디버그 Watch창에서 vector 내용 확인하기

STL 를 사용하다보면 어려운 점 중에 하나가 그 내용을 확인하기가 쉽지 않다는 점입니다. 배열을 사용하면 디버그 watch 창에 그 내용물이 보기 쉽게 표시되는데 배열의 STL 대응인 std::vector 를 사용하면 무슨 내용이 vector 저장되어 있는지 디버깅 시 확인하기가 쉽지 않습니다. 다음과 같이 watch 창에 입력하면 std::vector 의 내용을 확인할 수 있습니다.

01: /* testWatch.cpp : Defines the entry point for the console application. */
02:
03: 
04: #include "stdafx.h"
05: #include <vector>
06: #include <string>
07: 
08: struct Student
09: {
10:   std::string name;
11:   int id;
12: 
13:   Student(const std::string & _name, const int & _id) : name(_name), id(_id) {