class MyClass
{
private:
	int m_i;
public:
	class Inner // 1
	{
	private:
		float m_f;
	};
};
int main()
{
	int size = 0;
	MyClass c;
	size = sizeof(MyClass);	// 2
	MyClass::Inner in;
	size = sizeof(MyClass::Inner);	 // 3
    
    return 0;
}

int main()
{
	 CArr<float>::iterator iter;
	// 2.4
	CArr<float> arrFloat;
	arrFloat.push_back(1.f);
	arrFloat.push_back(2.f);
	CArr<float>::iterator iter;
	iter = arrFloat.begin();
	return 0;
}	class iterator
	{
	private:				
		CArr<T>*	m_pOwner;		// 1
		int			m_Idx;			// 1
	public:
		iterator()				
			: m_pOwner(nullptr)
			, m_Idx(-1)				// 2
		{
		}
		iterator(CArr<T>* _Owner, int _idx)	// 3
			: m_pOwner(_Owner)
			, m_Idx(_idx)	
		{}
		~iterator()
		{
		}
		
	};	
};public:
	void push_back(const T& _Data);
	
	class iterator;					// 3
	iterator begin()				// 4
	{	
    	//iterator iter;			// 5
		//iter.m_pOwner = this;		// 5
		//iter.m_Idx = 0;			// 5
        
		iterator iter(this, 0);		// 6	
		return iter;
	}
#include <iostream>
#include "CArr.h"
#include <vector>
using std::vector;
class MyClass
{
private:
	int	m_i;
public:
	class Inner
	{
	private:
		float m_f;
	};
};
int main()
{
	int size = 0;
	MyClass c;
	size = sizeof(MyClass);
	MyClass::Inner in;
	size = sizeof(MyClass::Inner);
	CArr<float> arrFloat;
	arrFloat.push_back(1.f);
	arrFloat.push_back(2.f);
	CArr<float>::iterator iter;
	iter = arrFloat.begin();
	return 0;
}#pragma once
// 클래스 템플릿
template<typename T>
class CArr
{
private:
	T*		m_pData;
	int		m_MaxCount;
	int		m_CurCount;
public:
	void push_back(const T& _Data);
	class iterator;
	iterator begin()
	{
		iterator iter(this, 0);
		return iter;
	}
private:
	void Realloc();
public:
	int size() { return m_CurCount; }
	int capacity() { return m_MaxCount; }
	T at(int _Idx) { return m_pData[_Idx]; }
	T& operator[](int _Idx) { return m_pData[_Idx]; }
public:
	CArr();
	~CArr();
	class iterator
	{
	private:
		CArr<T>*	m_pOwner;
		int			m_Idx;
	public:
		iterator()
			: m_pOwner(nullptr)
			, m_Idx(-1)
		{
		}
		iterator(CArr<T>* _Owner, int _idx)
			: m_pOwner(_Owner)
			, m_Idx(_idx)
		{}
		~iterator()
		{
		}
	};
};
template<typename T>
CArr<T>::CArr()
	: m_pData(nullptr)
	, m_CurCount(0)
	, m_MaxCount(2)
{
	m_pData = new T[m_MaxCount];
}
template<typename T>
CArr<T>::~CArr()
{
	delete[] m_pData;
}
template<typename T>
void CArr<T>::push_back(const T& _Data)
{
	if (m_MaxCount <= m_CurCount)
	{
		Realloc();
	}
	m_pData[m_CurCount++] = _Data;
}
template<typename T>
void CArr<T>::Realloc()
{
	m_MaxCount *= 2;
	T* pNew = new T[m_MaxCount];
	for (int i = 0; i < m_CurCount; ++i)
	{
		pNew[i] = m_pData[i];
	}
	delete[] m_pData;
	m_pData = pNew;
}1차 23.12.27
2차 23.12.28
3차 23.12.29
4차 24.01.02
5차 24.01.03