반응형
출처 - http://cafe.naver.com/cppmaster/2218
// cppmaster.h<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = o />
// MODULE : CPPMASTER.h
// DESCRIPTION : print elements in container
// AUTHOR : kang seog min
// CONTACT : smk6809 @ yahoo.co.kr
// cafe.naver.com/cppmaster
// Usage :
// int x[10] = { 1,2,3,4,5,6,7,8,9,10};
// vector<int> v(x, x+10);
//
// show( x ); // array
// show( v ); // container
// show( x, x+10); // pointer
// show( v.begin(), v.end() ); // iterator
//
// show( x, false ); // no newline
#ifndef CPPMASTER_H
#define CPPMASTER_H
#if _MSC_VER > 1000
#pragma once
#endif
#include <iterator>
template<int N> struct int2type
{
enum { value = N };
};
template<typename T> struct is_array
{
enum { value = false };
};
template<typename T, int N> struct is_array<T[N]>
{
enum { value = true };
};
template<typename T> struct get_array_info
{
enum { rank = 0 };
};
template<typename T, int N> struct get_array_info<T[N]>
{
typedef T value_type;
enum { rank = N };
};
// sequence 버전
template<typename T> inline void _show_imp(const T& c, bool bnewline, int2type<0> )
{
ostream_iterator<typename T::value_type> out(cout, " ");
copy( c.begin(), c.end(), out );
if ( bnewline)
{
cout << endl;
}
}
// Container 의array 버전
template<typename T> inline void _show_imp(const T& c, bool bnewline, int2type<1> )
{
ostream_iterator<typename get_array_info<T>::value_type > out(cout, " ");
copy( c, c + get_array_info<T>::rank, out );
if ( bnewline)
{
cout << endl;
}
}
// Container version
template<typename Container> inline void show( const Container& c, bool bnewline = true )
{
_show_imp( c, bnewline, int2type<is_array<Container>::value>());
}
// Iterator version
template<typename Iterator> inline void show( Iterator first, Iterator last, bool bnewline = true)
{
ostream_iterator< typename iterator_traits<Iterator>::value_type > out( cout, " ");
copy( first, last, out);
if ( bnewline )
{
cout << endl;
}
}
#endif // CPPMASTER_H
// examples
#include <vector>
#include <iostream>
#include "cppmaster.h"
using namespace std;
int main()
{
int x[10] = { 1,2,3,4,5,6,7,8,9,10};
vector<int> v(x, x+10);
show(x);
show(v);
show( x, x+10);
show( v.begin(), v.end());
show( x, false ); // no new line
show( v );
}
반응형
'C++ > Study' 카테고리의 다른 글
[C++] 함수 오버로딩 (0) | 2024.12.13 |
---|---|
[C++] namespace (0) | 2024.12.13 |
[C++] 메모리 할당 이야기 (0) | 2024.12.13 |
[C++] 함수 객체 (0) | 2024.12.13 |
[C++] 헤더 파일(.h)과 정의 파일(.cpp)을 분할하는 기준 (0) | 2024.12.13 |