자료형에 새롭게 이름을 붙일 때
typedef long long ll; //long long 대신 ll으로 자료형 사용 가능
int a;
: 0으로 자동 초기화bool a;
: false(0)으로 자동 초기화bool arr[10] = {false};
: arr의 모든 원소를 false로 초기화bool arr[10];
도 동일int arr[10] = {0};
: arr의 모든 원소를 0으로 초기화int arr[10];
도 동일int arr[10] = {-1};
: 맨 처음 원소만 -1, 나머진 0으로 초기화됨for문을 통한 배열 초기화보다 빠르다
#include <memory.h>
/* 1차원 배열 */
memset(arr, 0, sizeof(arr)); //memset(배열시작점/배열이름, 초기화할값,sizeof(배열이름));
/* 2차원 배열 */
for(int i=0; i<10; i++){ //i는 행의 범위
memset(arr[i], 0, sizeof(int)*10); //모든 값 0으로 초기화
//sizeof(int)*10에서 10은 열의 크기
}
벡터
#include <algorithm>
vector<int> v;
v.resize(10); //v 크기 설정 후에
fill(v.begin(), v.end(), 0); // 전체 초기화
#include <algorithm>
vector<vector<int>> v(5, vector<int>(5));
v.resize(10, vector<int>(10, 0)); //v 크기 설정 후에
// 전체를 0으로 초기화
// 5개의 0으로 채워져있는 벡터(열)를 행에 채워넣는다
fill(v.begin(), v.end(), vector<int>(5,0);
배열
#include <algorithm>
int arr[10];
// arr[0]~arr[9]를 0으로 초기화
fill(arr, arr+10, 0);
#include <algorithm>
int arr[10][10];
// 전체 초기화 : arr[0][0]~arr[9][9]를 0으로 초기화
fill(&arr[0][0], &arr[10-1][10], 0);
#include <climits>
int minInt = INT_MIN; //int의 최솟값
int maxInt = INT_MAX; //int의 최댓값
long maxLong = LONG_MAX; //long의 최댓값
long long maxLongLong = LLONG_MAX; //long long의 최댓값
pair<int,int> mypair = make_pair(2, 5); //make_pair함수로 생성
cout << mypair.first; //2
cout << mypair.second; //5 //값을 리턴
mypair.first = 7;
mypair.second = 3; //값에 접근해서 수정 가능
vector< pair<int,int> > list(3); //pair형 벡터
list.emplace_back(make_pair(2,5)); //(2,5)를 벡터에 할당
cout << list[0].first << '\n'; //2 출력
cout << list[0].second << '\n'; //5 출력
typedef pair<int, int> P; //타입으로 직접 정의해서 쓸 수도 있음
priority_queue< P, vector<P>, greater<P> > Q; //최소부터 pop하는 우선순위 큐
Q.push(P(5,4)); //Q.push(make_pair(5,4));와 같음
Q.push(P(2,5));
Q.pop(); //P(2,5)가 pop
// ** (first, second)형 우선순위 큐에서는 먼저 first를 기준으로 비교하고, 만약 first가 같은 경우에는 second를 비교함 **
for문을 통해 배열, string, vector, list, set, map의 요소에 접근할 때 사용
int myArr[] = {1,2,3,4,5};
for(auto &element : myArr){
cout << element << ' ';
}
//element는 myArr배열의 원소를 차례대로 참조함
//element를 수정하면 배열의 요소에 영향을 미친다
//이름이 꼭 element가 아니여도 됨(아무거나 가능)
int myArr[] = {1,2,3,4,5};
for(const auto &element : myArr){
cout << element << ' ';
}
int myArr[] = {1,2,3,4,5};
for(auto element : myArr){
cout << element << ' ';
}
//myArr배열의 원소값이 차례대로 element에 '복사'됨
//element는 배열 요소와 자료형이 같아야 함 -> auto 키워드를 사용하면 C++이자동으로 자료형을 추론함
💡 포인터로 변환된 배열, 동적 배열에서는 사용 불가(배열의 크기를 알지 못하기 때문)
int sumArray(int array[]) // array is a pointer
{
int sum = 0;
for(const auto& number : array){ // compile error
sum += number; return sum;
}
}
int main()
{
int array[5] = { 9, 7, 5, 3, 1 };
std::cout << sumArray(array); // array decays into a pointer here
}
배열, 벡터의 원소들을 정렬해줌
quick sort(퀵정렬) 기반으로 구현되어있음
원소가 pair<자료형1, 자료형2> 형식일 땐, 첫번째 요소를 기준으로 먼저 정렬하고, 첫번째 요소가 같은 경우에는 두번째 요소를 기준으로 비교함
평균 시간복잡도 : O(nlogn)
#include <algorithm> //algorithm 헤더파일
using namespace std; //std 소속
//void sort(첫번째주소, 마지막주소, 정렬형태);
//정렬형태 매개변수는 없어도 됨(defalut는 오름차순)
//배열 arr의 0번째~n-1번째 원소까지 오름차순 정렬
//배열 시작~끝까지 정렬하려면 arr, arr+배열크기
sort(arr, arr+n);
//벡터 v의 처음부터 끝 원소까지 오름차순 정렬
sort(v.begin(), v.end());
//사용자 정의 함수 compare 대로 정렬
sort(v.begin(), v.end(), compare);
//내림차순 정렬 : greater가 내림차순인거 주의!!! 우선순위 큐랑 다름
sort(v.begin(), v.end(), greater<자료형>());
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[5] = {3,2,4,5,1};
sort(arr, arr+5);
//index 0 ~ index 4까지 오름차순 정렬
//첫번째 매개변수값~두번째 매개변수값 이전까지
//결과 : {1,2,3,4,5}
}
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool compare(string s1, string s2)
{
return s1 > s2;
//s1이 s2보다 사전순으로 더 뒤면 true 리턴
//string은 비교연산자를 통해 사전식 비교 가능
}
int main()
{
string arr[5] = {"abc", "aa", "abcd", "aza", "bcda"};
sort(arr, arr+5, compare); //arr[0]~arr[4]를 사전역순(내림차순)으로 정렬
}
#include <algorithm>
#include <vector>
using namespace std;
sort(v.begin(), v.end()); //벡터의 원소 전체를 오름차순 정렬
sort(v.begin(), v.end(), compare) //사용자 정의함수 사용
sort(v.begin(), v.end(), greater<자료형>()); //내림차순 정렬
sort(v.begin(), v.begin()+4, less<자료형>()); //v[0]~v[3]까지 오름차순 정렬
전역변수로 선언하면 선언만으로 배열 내용이 자동으로 채워진다.
int arr[7]; //{0,0,0,0,0,0,0}
bool arr[3]; //{false,false,false}
지역변수로 선언하면 선언만으로 배열 내용이 자동으로 채워지지 않는다.
int main()
{
int arr[7]; //직접 채워야함
bool arr[3]; //직접 채워야함
bool arr[3] = {true,}; //{true, false, false}
}
#include <algorithm>
int a = 3, b = 5, min, max;
min = min(a, b); //min=3
max = max(a, b); //max=5
(A + B) % p = ((A % p) + (B % p)) % p
(A * B) % p = ((A % p) * (B % p)) % p
(A - B) % p = ((A % p) - (B % p) + p) % p
각 결과
에 대해 맨 처음 규칙을 쓸 수 있을 듯 : 정수형에 대한 오버플로우를 막기 위함#include <iostream>
#include <cmath>
//사용법
int abs(int n);
long labs(long n);
double fabs(double n);
//예시
int x = -3;
int a = abs(x); //a=3