목록C++/문법 및 메소드(STL) (42)
나만의 작은 도서관

반복자(Iterator)란?STL의 구성 요소(반복자, 컨테이너, 알고리즘) 중 하나.STL은 Standard Template Library의 약자로, C++에서 템플릿을 이용해 정리해 둔 표준 라이브러리를 말한다.반복자는 원소에 접근할 수 있도록 컨테이너가 내부적으로 들고 있는 포인터 역할을 하는 “객체”이다 (포인터가 아니다)반복자는 포인터처럼 작동되도록 역참조(*)나 증감 연산자(it++, ++it)와 같은 연산자들이 오버로딩 되어있다.그냥 포인터랑 정확히 똑같이 작동한다고 생각하면 된다.iterator기본 반복자 타입. begin(), end() 함수가 iterator를 반환한다.begin()는 첫번째 원소를 가리키는 반복자를, end()는 마지막 원소 뒤를 가리키는 반복자를 반환한다.begin(..
레퍼런스란(Reference)?변수 선언 시 타입 뒤에 &를 붙여주는 것으로, 어느 변수의 또 다른 이름, 즉, 이명(alias)을 컴파일러에게 알려주는 것이다. 레퍼런스의 특징레퍼런스는 선언만 할 수 없다.레퍼런스는 선언 시 반드시 정의까지 해야 한다. 선언만 하는 경우 오류가 발생한다.int a = 10;int& another_a1; // 정의가 되어있지 않으므로, 오류int& another_a2 = a; // 이처럼 반드시 정의까지 해야한다. 레퍼런스는 재정의를 할 수 없다레퍼런스가 정의되었다면, 해당 레퍼런스가 소멸될 때까지 다른 변수의 레퍼런스가 될 수 없다.(재정의 불가)int a = 10;int &another_a = a; // another_a은 a의 레퍼런스int b = 3;anothe..
포인터(Pointer)란?포인터는 메모리 상에 위치한 특정한 데이터의 (시작) 주소값을 저장하는 변수를 말한다. 포인터 선언// [포인터 타입]* [포인터 이름] int* p [= nullptr]; 참조(&) 연산자와 역참조(*) 연산자 참조(&): 변수 앞에 '&'를 붙이면 값 대신 주소를 반환한다.역참조(*): 변수 앞에 '*'를 붙이면 변수가 저장 중인 주소값에 저장된 값을 반환한다. 역참조는 포인터 변수만 사용할 수 있다.int a = 10;int* ptr = &a;cout 포인터와 멤버 데이터포인터 변수의 타입이 struct 또는 class인 경우, 멤버 데이터를 꺼낼 땐 화살표('->')를 사용한다.#include using namespace std;struct A { void fun..
열거형이란?열거형(Enumerations)은 열거자(enumerator)라 불리는 정수 상수 집합으로 구성된 사용자 정의 형식을 말한다.enum 키워드C언어에서 넘어온 열거형 키워드이다. 사용법은 아래와 같다.enum [identifier] [: type] {enum-list}// identifier: 열거형에 지정된 형식 이름 ⇒ 변수 이름// type: 열거자(enumerator)의 타입. 모든 열거자는 해당 타입으로 표현된다. 모든 “정수” 계열 타입이 가능하다.// enum-list: 열거자가 쉼표로 구분된 리스트. 범위에 있는 모든 열거자의 이름은 고유해야 하지만, 값은 중복될 수 있다. // 지역 변수와 같이 선언된 범위 내에서만 살아있다.// ex.enum A : int {ZERO..
배경여기저기 코드를 보다 보면 class의 전유물이라고 생각했던 기능들이 struct에서 멀쩡히 돌아가는 경우를 종종 보았다. 이것도 돼? 저것도 돼? 하며 놀란적이 한두 번이 아닌데, 이번 시간에는 struct가 어디까지 가능한지 알아보도록 한다. C++에서 struct와 class는 맥락상 동일하다.매우 충격적인 결과지만 사실이다. 유일한 차이점으로 기본 접근 지정자(Access specifier)가 struct은 public, class는 private이다. 이거 말곤 전부 똑같다. (어셈블리 언어로 변환해서 봐도 완전히 동일한 구조를 가지고 있다.) 아래 코드에서의 MyStruct와 MyClass는 기본 접근 지정자만 다를뿐 완전히 같다.#include using namespace std;stru..

static이 붙은 변수, 정적 변수변수는 자신이 정의된 범위(중괄호로 표현됨)를 벗어나면 파괴된다. 즉, 변수가 선언된 중괄호를 벗어나는 순간, 변수의 생명 주기가 끝나면서 사라지게 된다.하지만 변수가 static이 붙은 정적 변수라면 자신이 선언된 범위를 벗어날 때 사라지는 것이 아닌 프로그램이 종료될 때 사라진다. 아래 코드를 통해 정적 변수가 범위를 벗어나도 값이 유지되어 함수를 호출할 때마다 증가하는 것을 볼 수 있다.+) 참고로 함수 내에 정적 변수가 존재할 경우, 정적 변수의 초기화는 함수가 처음 호출될때 단 한 번만 이루어진다.#include using namespace std;void func1(){ static int n = 0; // func1() 최초 호출 시에만 실행(초기화 ..