C++/Study

[C++] 컨테이너의 요소를 출력하는 Helper 함수

MoongStory 2024. 12. 13. 19:30
반응형

출처 - http://cafe.naver.com/cppmaster/2218

 

[ 컨테이너의 요소를 출력하는 Helper함수 ]

C++수업 시간에 사용했던.. show()함수 입니다. STL 공부하시는 분에게 도움이 되시기를.. // cppmaster.h<?xml:namespace prefix = o ...

cafe.naver.com

 

// 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