반응형
(추후 수정 예정입니다.)
- 일반 정수 값 출력
include <algorithm>
*max_element(v.begin(), v.end())
- 인덱스 출력
max_element(v.begin(), v.end()) - v.begin();
min_elements ```;
- 배열 내 가장 큰 값 찾기
bigger = *max_element(longer, longer + 31);
- 시간 단축
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
- 소수점이나 지수 표기 하지 않게 만들기
기본적으로 6자리까지 표현이 가능하게 설정되어있다.
cout<<fixed; // 이 값은 소수점만을 해당시키게 하는 값이다.
cout.precision(6); // fixed가 없을 경우 정수부분 소수점부분 다 합쳐서 6칸, 있으면 소수점만 6칸
ex) 4321.123456 일 경우 fixed 가 없을 경우 4321.12, 있을 경우 4321.123456
cout.unsetf(ios::fixed); // 해제시 사용하는 값
- 문자열 혹은 백터를 거꾸로 만드는 방법
#include <algorithm>
reverse(str.begin(), str.end());
reverse(v.begin() + @, v.end() + @ + 1(원하는 위치의 끝부분에 1을 더해준다));
이를 이용해서 원하는 부분만 뒤집을 수 있다.
(반환하는게 아니고 해당 값 자체를 역순으로 바꾼다.)
- 문자 및 문자열 찾기
find, replace
#include <algorithm>
size_t temp = a.find(b);
if(temp != string::npos)
문자열을 찾아서 인덱스를 반환한다.
만약 해당 문자열이 존재하지 않으면 unsigned int의 최댓값을 출력하며, 이는 size_t형으로 받을 수 있습니다.
이를 string::npos(최댓값을 뜻함)과 비교해서 같은 값이 아닐경우 출력합니다.
auto it2 = find_if(v.begin() , v.end(), isOdd); //isOdd는 함수입니다.
while (it2 != v.end()) {
cout << *it2 << "\n";
it2 = find_if(it2+1, v.end(), isOdd);
}
백터를 활용할 경우 이러한 형식을 사용하면 됩니다.
- 문자열 교체
s.replace(s.find(find_str), find_str.length(), replace_str);
첫번째 : 찾아야 할 문자열 시작 위치, 두번째 : 없애야 할 문자 길이, 세번째 : 교체할 문자 - > 해당 위치만 교체한다.
#include <regex>
string s = regex_replace(temp1, regex(temp2), temp3)
첫번째 : 문자열, 두번째 : 찾을 문자, 세번째 : 교체할 문자
찾을 문자가 나오면 전부 교체한다.
- 문자열 내 해당 문자 값이 숫자인지 아닌지 확인하는 함수
isdigit(arr[0])
숫자일 경우 아무 숫자(주로 4) 반환, 문자일경우 0 반환
- 대문자 소문자 만들기
#include <cctype>
toupper(a) tolower(a)
a는 char이다. 만약 한 문자 string을 사용하려면, s[0]을 사용한다.
또한 새로 생성을 위해서는 string을 ""로 생성 후 바로 아래쪽에 s += toupper(temp);를 이용한다.
- 제곱, 루트 출력
#include <cmath>
pow(2, 2)
sqrt(4)
- sstream 문자열 나누기
//map 넣는 방법 insert과 emplace
#include <sstream>
#include <vector>
string str = "Hello world!", temp;
istringstream ss(str);
vector<string> answer;
while(getline(ss, temp, ' '))
{
answer.push_back(temp);
}
아니면 cin처럼 공백이 많을 경우에는 이렇게 사용해도 된다.
while (ss >> word) {
answer.push_back(temp);
}
여러가지 조건을 넣어서 사용하려면 아래 형식을 사용한다.
while(getline(ss, token, ' ') || getline(ss, token, ','))
만약 내부 값을 비워서 재사용하려고 하면,
ss.str(""); // ss 객체의 내부 문자열을 비움
ss.clear(); // ss 객체의 상태를 초기화
ss.str(str_2); // ss 객체에 새로운 문자열 입력
- 글자 나누기
answer = my_string.substr(my_string.length() - n);
my_string.length() - n 부터 출력한다.
substr(5, 10)이면 5부터 10개의 값을 출력한다.
- 문자열 전체 입력받기
cin >> n;
cin.ignore();
getline(cin, str);
getline(cin, str, char temp);
문자열을 전체 입력받을 수 있다.
대신에 cin이 있으면 \n문자가 비워지지 않아
getline이 정상적으로 실행되지 않기에 무조건 ignore를 통해 비워줘야 한다.
세 번째 문자를 통해 종결문자를 입력받을수도 있다.
- 문자열 숫자 변환 관련
to_string(temp), stoi(temp)
- 백터 중복제거
//정렬 후
s.erase(unique(s.begin(), s.end()), s.end());
insert, append
- 절댓값 출력
abs, fabs
#include <cmath>
abs(temp), fabs(temp)
앞은 일반 정수, 뒤는 실수
- arr 끝에 0을 추가하거나 그냥 길이를 temp 수로 맞추기
temp <<= 1;
- temp를 간단하게 2의 제곱시키기
arr.resize(temp, 0);
arr.resize(temp);
- 비교 함수 만들기
bool compare(pair<int, int> a1, pair<int, int> a2)
{
if (a1.second == a2.second) return a1.first > a2.first;
else return a1.second > a2.second;
}
왼쪽이 커지면 내림차순, 오른쪽이 커지면 오름차순으로 외워도 좋다
- 소수점 있는지 없는지 확인하기
double temp2 = sqrt(i);
temp = temp2;
if (temp2 - temp != 0) check = false;
- list에 대한 이모저모
#include <list>
list<int> temp; // push_back으로 값을 넣을 수 있다.
auto it = temp.begin();
temp.splice(index, t_temp); // temp의 index 위치 뒤에 t_temp의 배열 값을 넣는다.
advance(it, 300) // advance, it의 temp.begin값을 300으로 바꾼다. (인덱스 값 변경)
erase(it) // 해당 인덱스 값 제거
출력 시 for(auto i = temp.begin(); i != temp.end(); i++)
cout << *i; 를 사용한다.
advance(it, index);
for(int j = 0; j < t_count; j++)
{
it = answer.erase(it);
}
이런 형식으로도 해결 가능하다.
- set 사용 시 정렬 기준 바꾸려면
set<string, greater<string>> s;
- bool 배열 초기화
bool num[10000000]
fill(num, num + 1000000, true);
혹은
memset(num, true, sizeof(num))
- 무한대 출력
#include <limits>
infinity
- 반올림하기
double answer = 286;
cout << round(answer/10); -> 29
반응형