목록프로그래밍 언어/C++ (13)
하다보니
void func(vector vect) 위와 같이 vector를 매개변수로 두어 함수를 호출한 경우는 함수 안에서 값을 바꾸더라도 해당 함수가 반환된 이후인 main함수에서는 영향이 없다. 따라서 호출한 함수 안에서 vector값을 변경하고 싶은 경우에는 vector를 값에 의한 호출(call by value)가 아닌, 아래와 같이 참조에 의한 호출( call by reference)를 이용해야 한다. void func(vector &vect)
두 개 이상의 타입을 하나로 묶어줌, pair의 확장 버전. 헤더 파일 : #include queue Q; - 튜플 만들기 make_tuple() 함수는 튜플을 만들어 주는 함수이다. auto로 설정된 변수에 make_tuple을 사용하여 초기화하면 tupleValue는 데이터 타입이 튜플이 된다. auto typleValue = std::make_tuple(10, 'x', "string") - 원소 가져오기 get() 함수를 이용해 tupleValue에 저장된 값 중 2번 인덱스를 가진 tuple string을 가져온다. std:get(tupleValue); - 값 swap하기 std:swap(tup1, tup2); - 튜플에 저장된 값 x,y,z에 풀어서 넣어주기. tie 키워드 사용. std::ti..
헤더파일을 선언해준다. template void reverse(BidirectionalIterator first, BidirectionalIterator last) first부터 last까지 요소들을 reverse 해라. [first,last) first부터 last 바로 전 인덱스까지 요소들을 뒤집는다. iterator 매개변수로 reverse하고 싶은 위치의 첫번째, 마지막 위치를 넣으면 reverse 된다. 참고) 이터레이터는 포인터의 형태로 이 리스트에 접근한다. 그리고 이때 쓰이는 함수 중 2개가 begin() 함수와 end() 함수이다. begin() 함수는 벡터의 데이터가 있는 리스트의 시작 주소를 리턴하는데, 첫 번째 값 위치이다. end() 함수는 리스트의 끝 주소를 리턴하는데, 마지막 ..
template InputIterator find(InputIterator first, InputIterator last, const T& val); 에 정의됨. 범위 안에 원하는 값을 찾는다. first부터 last 전까지의 원소들 중 val과 일치하는 첫 번째 원소를 가리키는 반복자를 리턴한다. 만일 일치하는 원소를 찾지 못할 경우 last를 리턴한다. 참고로 이 함수는 string의 find 함수와 다르다. 인자 - first, last : 원소들의 시작과 끝을 가리키는 반복자들 이때 확인하는 범위는 [first,last)로 정의된다. first가 가리키는 원소는 포함되지만 last가 가리키는 원소는 포함되지 않는다. - val : 비교할 값. 이때 val의 타입 T의 경우 operator ==가 ..
pair란? 한번에 두개의 자료형을 갖는 클래스, 사용자가 직접 지정한다. 그냥 클래스 만들 때 사용하기도 하지만 스택, 큐 등에 유용하게 사용한다. pair 사용법 헤더파일 #include 생성하기 위해 pair 클래스명(자료형1변수, 자료형 2변수) ex)pair x(15,'a'); 첫번째 자료형을 보기 위해서는 클래스명.first, 두번째 자료형을 보기 위해서는 클래스명.second이다. ex)x.first / x.second 변수를 보기 위해서는 두가지 방법이 있다. 첫번째는 클래스명.first=새로운 변수, 클래스명.second=새로운 변수 ex)x.first=16; 두번째는 클래스명=make_pair(첫번째 변수, 두번째 변수)이다. ex)x=make_pair(17,'c'); stack과 qu..
문자열(string)을 숫자(int)로 형변환하기 위해서 stoi 함수를 사용할 수 있다. stoi는 string to integer이 축약된 단어이며 double형으로 변환하고 싶다면 stod를, long long타입으로 변환하고 싶다면 stoll을 사용하면 된다. 해당 숫자 타입의 범위를 벗어나지 않는지 주의하여야 한다. 숫자를 문자열로 변환하고자 할 경우에는 to_string 함수를 사용하면 된다. 위 함수들 모두 string 헤더에 포함되어 있다. 문자->숫자 : 문자-'0' 숫자->문자 : 숫자+'0'
auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다. 즉, auto 키워드를 사용하면 초기값 형식에 맞춰 선언하는 인스턴스(변수)의 형식이 자동으로 결정된다. 이것을 타입 추론(type inference)라고 한다. auto d=5.0; //5.0은 double type이므로 d는 double로 결정 auto i=1+2; //1+2는 int type이므로 i는 int 타입 변수를 함수의 반환 값으로 초기화 할 때도 사용 가능하다. int add(int x, int y) { return x + y; } int main() { auto sum = add(5, 6); // add() returns an int, so sum will be type int return..
sort 알고리즘은 헤더파일에 속해있다. sort(start,end)을 이용하여 [start,end) 의 범위에 있는 인자를 오름차순으로 정렬해주는 함수이다. quick sort를 기반으로 함수가 구현되어 있어 평균 시간 복잡도는 nlogn이다. 따로 퀵 정렬을 구현할 필요 없이 C++STL에서 제공해주는 sort함수를 이용하면 편리하게 정렬을 할 수 있다. sort(배열의 시작점 주소,마지막 주소+1) compare() 함수를 만들어 sort()의 세번째 인자 값으로 넣으면, 해당 함수의 반환 값에 맞게 정렬이 동작한다. bool compare(int a, int b) { return a > b; // 내림차순 } sort(a, a+10, compare);
fill함수는 어떤 연속성을 띈 자료구조(벡터나 배열 같은)의 시작점부터 연속된 범위를 어떤 값이나 객체로 모두 지정하고 싶을 때 사용하는 함수이다. - 기본구조 #include void fill (ForwardIterator first, ForwardIterator last, const T& val); #include : fill함수를 사용하기 위해 필요한 헤더파일 first: 채우고자 하는 자료구조의 시작위치 iterator last: 채우고자 하는 자료구조의 끝위치 iterator이며 last는 포함하지 않는다! val: first부터 last전까지 채우고자 하는 값으로 어떤 객체나 자료형을 넘겨줘도 템플릿 T에 의해서 가능하다.
C/C++에서 배열은 선언 당시 크기가 지정되어야 한다. (고정된 크기의 자료구조) 배열은 일반 변수와 같이 자료형(type)을 먼저 선언하고 배열의 이름을 명시해준 후 대괄호를 사용해서 배열의 크기를 지정해준다. 이때 배열의 크기는 고정된 상수(양의 정수)여야 하며 일반 변수를 지정해 줄 수 없다. 배열 요소의 자료형은 int형을 포함, 모든 기본 자료형(char,double등)을 지원한다. 일반적으로 다음과 같이 선언할 수 있다. int arr[5]; 또한 아래와 같이 크기를 명시해주지 않고 배열의 요소를 모두 정의할 수 있다. int arr[]={1,2,3,4,5,6,7}; 이 경우에는 arr 변수의 크기는 개발자가 직접 명시하지 않아도 자동으로 10으로 지정된다. 또한 배열의 크기를 명시적으로 지..