str = "aBcDe";
for(int i = 0; i < str.length(); i++) {
if (str[i] > 90) str[i] = str[i] - 32;
else str[i] = str[i] + 32;
}
for(int i = 0; i < str.length(); i++) {
if (str[i] > 90) str[i] = tolower(str[i]);
else str[i] = toupper(str[i]);
}
cout << str << endl;
vector<int> v;
v.front(); //첫번째 원소
v.back(); //마지막 원소
v.erase(v.begin() + 3) // v[3] 삭제
v.erase(v.begin() + 2, v.begin() + 5); // v[2]부터 v[4]까지 삭제
v.pop_back(); // 벡터의 마지막 원소 제거
int min = *min_element(v.begin(), v.end()); // v벡터의 최솟값 저장
int max = *max_element(v.begin(), v.end()); // v벡터의 최댓값 저장
int max_index = max_element(v.begin(), v.end()) - v.begin();
// 인덱스 값을 알 수도 있음
vector<int> v = {2,35,6,6,6,7};
int count = count(v.begin(), v.end(), 6); // v 벡터에 있는 6의 개수
if (find(v.begin(), v.end(), 찾는값) == v.end())
cout << "찾는 값이 없음" << endl;
// find의 반환 값이 벡터의 끝이면 없는 거고 끝이 아니면 있는 것
// 내가 찾는 값이 있을 때 그 원소의 인덱스를 계산하는 방법은
// index = find(v.begin(), v.end(), 찾는값) - v.begin();
vector<string> v = {"aver", "greg", "gwqaerff"};
sort(v.begin(), v.end()); // 오름차순
sort(v.rbegin(), v.rend()); // 내림차순
vector<int> v(52, 0); // 길이가 52인 벡터를 모두 0으로 초기화
vector<int> v = {1,1,1,2,3,3,3,4};
v.erase(unique(v.begin(), v.end()), v.end());
cout << v << endl; // 1,2,3,4
string a = "i like you";
strting a = a.erase(0, 2); //like you
string str = "Hello world";
string str1 = str.substr(0, 3); // str의 0번 인덱스부터 길이 3의 문자열
string str2 = str.substr(3); // str의 3번 인덱스부터 문자열의 끝까지
string s = "gawefa";
reverse(s.begin(), s.end());
#include <sstream>
string x, y, z;
string s = "abc def ghi";
stringstream ss(s);
string s1;
ss >> x >> y >> z;
while (ss >> s1) {
cout << s1 << endl;
} // 문자열이 얼마나 긴지 모를 때 반복문을 활용할 수 있다.
int num = pow(10, 3); // 10의 세제곱
double num = sqrt(숫자); // 숫자의 제곱근
map<string, int> m; // 선언
map<string, int> m1 = {
{'a', 1}, {'b', 2}
} //선언 및 초기화
m.find(찾는 값) != m.end(); // 찾는 값이 존재하는 경우
m.find(찾는 값) == m.end(); // 찾는 값이 존재하지 않는 경우
map<string, int>m;
m["a"] = 10;
m["a"] += 5;
cout << m["a"] << endl; //15
map<string, int> m = {
{"Re", 0}, {"Pt", 0}, {"Cc", 0}, {"Ea", 0}, {"Tb", 0}, {"Cm", 0}, {"Ex", 0}
};
for (auto i = m.begin(); i != m.end(); i++) {
cout << i->first << ' ' << i->second << endl;
}
#include <stack>
stack<int> st;
stack<int> st2;
st.push(); // 원소 추가
st.pop(); // 제일 위의 원소 제거
st.top(); // 제일 위의 원소 반환
st.empty(); // 스택이 비어있으면 true 반환
st.size(); // 스택의 크기 반환
swap(st, st2); //두 스택의 내용을 바꿈
#include <set>
set<int> s;
s.insert(1);
s.insert(4);
s.insert(2);
for (auto it = s.begin(); it != s.end(); ++it) {
cout << *it << ' ';
}
s.begin();
s.end();
s.erase(1);
s.count(1); //1이 집합에 있으면 1 반환, 없으면 0 반환
s.empty();
s.size();
s.clear();
string s;
getline(cin, s);
int n;
cin >> n;
string s;
getline(cin, s);
int n;
cin >> n;
cin.ignore();
string s;
getline(cin, s);
#define ull unsigned long long
int main() {
ull n;
cin >> n;
for (int i = 0; i < 10; i++) {
cout << n / (1ULL << i);
}
}
int a = 24;
int b = 18;
while(b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
위의 코드를 실행하면 결과적으로 a에 최대공약수가 할당되는 것을 알 수 있다.
어려운 문제에서는 꽤 큰 수에 대한 조합을 계산해야 하기 때문에 오버플로우를 방지하려면 미리 약분하며 계산하는 코드가 필요하다.
#define ULL unsigned long long
ULL combination(int n, int k) {
if (k > n) return 0;
if (k > n - k) k = n - k;
ULL res = 1;
for (int i = 1; i <= k; i++) {
res = res * (n - k + i) / i;
}
return res;
}