C++ (85) 썸네일형 리스트형 [C++] const string&을 쓰는 이유(const와 레퍼런스) private: string m_strTag; public: void SetTag(const string& strTag) { m_strTag = strTag; } 위 코드는 m_strTag 를 지정하는 함수이다. 그런데 string이 아니라 const string&을 사용하는 이유가 궁금해서 찾아보았다. 우선 레퍼런스를 사용하는 이유는 Call by Reference를 이용해서 값을 복사하지 않아 메모리 낭비를 줄이고 속도가 더 빠르기 때문이다. 그렇다면 const는 왜 붙이는 것일까? #include #include using std::string; string g_value; void ProcessStringByRef(string& s) { g_value = s; std::cout [C++] static 멤버와 싱글톤 패턴 정적 멤버 변수는 클래스에 속하지만 객체별로 할당되지 않고 모든 객체가 공유하는 멤버이다. 개별 객체와는 직접적 상관이 없고 객체 전체를 대표하는 클래스와 관련된 정보를 저장하는 특수한 멤버이다. 싱글톤 패턴은 애플리케이션이 시작할 때 해당 클래스 타입의 정적 멤버 포인터 변수를 통해 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 쉽게 말하자면 객체를 단 하나만 만들 수 있는 것이다. #define DECLARE_SINGLE(Type) \ private:\ static Type* m_pInst;\ public:\ static Type* GetInst()\ {\ if(!m_pInst)\ m_pInst = new Type;\ return m_pInst;\ }\ sta.. [C++] 맵(map) 맵은 키와 값의 쌍을 관리한다. 맵도 키를 정렬 및 검색의 기준으로 사용한다. 맵은 []연산자를 이용해서 요소를 삽입할 수도 있다. 맵이름[key] = value; 로 key와 value를 pair로 만들어서 삽입할 수 있다. 이 연산자는 멀티맵에는 사용할 수 없는데 키 값이 중복되어 어떤 것을 가리키는 지 모호하기 때문이다. 읽기 위해서 맵이름[key] 만 써도 (key,0)인 pair가 삽입되므로 주의해야 한다. (삽입때만 쓰는게 좋음) 셋과 같이 Key는 수정할 수 없으며 Value는 it->second = ?? 로 직접 수정할 수 있다. 맵의 가장 큰 장점은 빠른 검색 속도이다. 키를 삽입할 때마다 정렬된 위치를 찾아서 삽입해야 하므로 삽입 속도는 느리지만 이분 검색을 이용하기 때문에 검색 속도는.. [C++] 셋(set) 셋은 키(key)를 저장하며 값은 저장하지 않는다. 셋은 자동으로 데이터를 오름차순으로 정렬하기 때문에 정렬함수는 따로 없고 삽입할 때도 위치를 지정하지 않는다. 그리고 그냥 셋은 중복 키를 허용하지 않으며 멀티셋에서 중복 키를 허용한다. set와 같이 두번째 인수를 함수 객체로 지정할 수 있다. 그래서 set을 정렬을 위해 비교가 필요할 때 마다 함수 객체의 ()연산자를 호출해서 비교한다. set이 사용하는 디폴트 함수 객체는 less 인데 < 연산자를 사용한다. 셋은 ==연산을 요구하지 않고 < 연산자로 이분 검색을 한다. (함수객체가 less일 경우) 동일한 것은 두 값이 완전히 같은 것, 객체일 경우 모든 멤버까지 같은 것으로, ==연산자를 이용한다. 동등한 것은 두 값이 같은 것으로 인정되는 것.. [C++] 반복자 반복자는 컨테이너의 한 지점을 가리키는 객체이다. 반복자를 이용하면 알고리즘의 내부 코드에서 어떤 컨테이너이든지 상관없이 컨테이너의 요소에 접근할 수 있다. 반복자는 기능 별로 종류가 있다. 입력 반복자(InIt) 입력 반복자는 반복자가 가리키는 위치의 요소를 읽는 것만 가능하다. a=*it; // 가능 *it=a; // 불가능 출력 반복자(OutIt) 요소의 내용을 변경할 수 있는 반복자이며 보통 읽기도 가능하지만 필수는 아니다. *it=a; // 가능 a=*it; // 꼭 필요치 않음. 순방향 반복자(FwdIt) 입력, 출력이 모두 가능하고 ++it, it++를 통해 순방향으로 이동 가능하다. 양방향 반복자(BiIt) 순방향뿐만 아니라 --연산자로 역방향으로도 이동이 가능하다. 임의 접근 반복자(Ra.. [C++] 함수 객체 함수에게 더 구체적인 처리 방식을 지정하기 위해 함수 객체를 전달할 수 있다. 함수 객체는 함수 호출 연산자인 ()을 오버로딩한 객체이다. struct print{ void operator()(int a)const{ cout [C++] auto_ptr string 객체는 문자열을 저장하기 위해 버퍼를 동적으로 할당해서 관리하는데 이 메모리는 자동으로 회수된다. 그러나 파괴자는 동적으로 할당한 메모리에 대해서는 책임을 지지 않는다. using namespace std; void main() { double *rate; rate=new double; *rate=3.1415; cout [C++] 네임 스페이스 namespace 이름 { 여기에 변수나 함수를 선언한다. } 네임스페이스는 명칭이 중복되는 것을 방지하기 위해 명칭이 기억되는 영역이다. int i; // 전역 네임 스페이스 소속 namespace A { int i; // A 소속 } namespace B { int i; // B 소속 } void func() { int i; i=1; // 지역변수 i ::i=2; // 전역 네임 스페이스의 i A::i=3; // A 네임 스페이스의 i B::i=4; // B 네임 스페이스의 i } void main() { func(); } 네임 스페이스 작성 규칙 ①네임 스페이스는 다른 네임스페이스와 변수, 함수와 다른 이름을 가져야 한다. ②네임 스페이스는 전역 영역에 선언되어야 한다. ③네임 스페이스는 중첩해서 .. 이전 1 2 3 4 5 6 7 8 ··· 11 다음