ㄱ.   단일 요소 멤버 함수보다 범위 멤버 함수가 더 좋은 이유.

    범위 멤버 함수를 사용한 코드가 대개 짧다.

    범위 멤버 함수는 훨씬 명확하고 간결한 의미를 전달 한다.

ㄴ.   단일 요소 멤버 함수에서는 메모리 할당자의 요구 많음.
객체 복사도 빈번, 불필요한 연산도 자주 일어남
.
같은 일은 한다면, 범위 멤버 함수는 이 보다 효율적.

ㄷ.   copy를 사용하여 루프 없이 비슷해 보이지만 범위 단위로 동작하는 멤버 함수보다 비효율적인 면이 있다.

    불필요한 함수 호출 범위 멤버 함수는 한번만 하면 되기 때문.

    새로운 요소를 넣기 위해 들어 있던 요소를 밀어 넣는 비용.

    메모리 할당.

ㄹ.   범위 멤버 함수.

    범위 생성 모든 컨테이너는 다음과 같은 생성자를 지원.
container::container(Inputlterator begin, Inputlterator end);

    범위 삽입 모든 표준 컨테이너는 다음과 같은 insert를 지원
void contatiner::insert(iterator position, Inputiterator begin, Inputiterator end);
연관 컨테이너
void contatiner::insert(Inputiterator begin, Inputiterator end);

    범위 삭제
iterator contation::erase(iterator begin, iterator end); -
표준 시퀀스 컨테이너
void contation::erase(iterator begin, iterator end); -
표준 연관 컨테이너

    범위 대입 모든 표준 시퀸스 컨테이너
void contatiner::assign(Inputiterator begin, Inputiterator end);

 

#include "stdafx.h"
#include < iostream >
#include < string >
#include < vector >

class CTest
{
public:
	CTest(const int _kiID)
		: m_iID(_kiID)
	{
		cout << "ID : "<< m_iID << " 디폴트 생성자 호출" << endl;
	}
	CTest(const CTest& _krTest)
		: m_iID(_krTest.m_iID)
	{
		cout << "ID : "<< m_iID << "복사 생성자 호출" << endl;
	}
	const CTest& operator = (const CTest& _krTest)
	{
		this->m_iID = _krTest.m_iID;
		cout << "ID : "<< m_iID << "대입 연산자" << endl;

		return *this;
	}
	~CTest()
	{
		cout << "ID : "<< m_iID << "소멸자" << endl;
	}
private:
	int m_iID;
};


int _tmain(int argc, _TCHAR* argv[])
{
	CTest TestArr[5] = {1, 2, 3, 4, 5};

	cout << "=====================================================" << endl;

	std::vector< CTest > VecTest1;
	std::vector< CTest > VecTest2;

	VecTest1.insert(VecTest1.begin(), TestArr, TestArr + 5);

	cout << "=====================================================" << endl;

	copy(TestArr, TestArr + 5, inserter(VecTest2, VecTest2.begin()));
	return 0;
}
Posted by 냉동