머릿말
코딩 테스트를 쳐본 사람은 알겠지만, 머리속으로는 해결방법 및 로직에 대해 이해가 되었고 심지어 말로 설명 할 수 도 있으나, 이를 코드로 작성 또는 API를 통해 실제 구현하는데 어려움을 느껴본적이 있을 것입니다.
따라서, C++ 로 코딩 테스트를 보기로 하였다면 최소한 아래 API / 예제들은 충분히 익히고 가면 도움이 되겠다는 생각에 정리를 해보았습니다. (이미 정리 잘하신 분들의 사이트에서 많이 참고 하였음. 아래 Reference 사이트란 명기)
혹시라도 도움이 되셨다면 좋아요 / 댓글 부탁드리며, 만약 정정할 내용있더라도 댓글 부탁드립니다.
기본 틀
가장 기본틀
#include <iostream>
using namespace std;
int main(){
cout << "hello" << endl;
return 0;
}
클래스 포함 기본틀
#include <iostream>
using namespace std;
class MyCar{
private:
// 멤버 변수
int fuel = 10;
bool power = false;
public:
//생성자
MyCar(){
this->fuel = 100;
this->power = true;
}
//생성자 다중 정의
MyCar(int n){
this->fuel = n;
this->power = true;
}
//소멸자
~MyCar(){
cout<<"소멸되었습니다."<<endl;
}
// 메소드
void go(){
this->fuel--;
}
void fuel_check(){
cout<< "연료 : "<< fuel<<endl;
}
};
class MySuv : public MyCar { //MyCar 클래스 상속
void go(){
this->fuel -=2;
}
}
int main(){
MyCar car = MyCar(); //단일 클래스 생성
car.go();
car.fuel_check();
MyCar car[3]; //복수 클래스 생성
for(int i=0; i<3 ; i++){
car[i] = MyCar(50); //클래스 생성자 호출
}
MySuv suv = MySuv(); //상속된 MySuv 클래스 생성
suv.go();
car.fuel_check();
return 0;
}
STL 표준 C++ 라이브러리 개념
- Container (컨테이너) : 객체들을 저장하는 객체 혹은 클래스 (vector, list, string, map 등)
- Sequence Container (순차적 접근 데이터 집합): array, vector, string, deque, list 인 선형 방식의 컨테이너
- Associate Container (키를 사용한 데이터 접근) : set, multiset, map, multimap 인 비선형 방식의 컨테이너 - Iterator (반복자) : 컨테이너에 저장된 요소를 순회하고 접근하는 객체 혹은 클래스 (추상화)
- lgorithm(알고리즘) : 데이터를 다루기 위한 일련의 함수 (find, short, search 등)
- Container Adaptor : stack, queue, priority_queue 등
- Allocator : 메모리의 할당과 해제를 해준 객체
- Function Object : 함수처럼 동작하는 객체로 Operator()연산자를 overloading한 객체
입출력
기본적인 API
#include <iostream>
#include <fstream> // 파일 입출력
int main(){
/* 기본적인 입출력 함수 */
string s;
cin >> s; //cin 입력
cout << s; //cout 출력
/* 문자하나만 입력 */
char ch;
ch = cin.get();
cout << ch;
/* istream 라이브러리의 getline() - char 타입으로 접근 필요 */
//콘솔 입출력
char ch_arr[100];
cin.getline(ch_arr, 10);
cout<<ch_arr;
//파일 입출력
ifstream ifs;
ifs.open("fileinput.txt");
ifs.getline(ch_arr, 100);
cout<<ch_arr;
ifs.close();
/* string 라이브러리의 getline() - string 타입으로 접근 필요 */
string s2;
getline(cin, s2);
cout<<s2;
ifstream ifs;
ifs.open(fileinput.txt");
getline(ifs, s2);
cout<<s2;
return 0;
}
# 주의 사항
cin 경우 엔터 ('\n')를 무시하지 않고 잡으므로, 연속으로 cin을 받는 경우 다음 cin에 '\n'가 포함되므로, cin 이후 하기와 같이 버퍼를 비워주는 코드를 추가하자. (단, getline 만 쓰는 경우 앞 문자 하나가 지워지게 되므로 사용상 주의)
cin.ignore();
소수점 자리 표현
#include <iostream>
#include <cmath> //반올림/올림/내림 함수
using namespace std;
int main(void)
{
int a = 10;
int b = 3;
/* 정수 포함 5 자리 까지 표현됨 */
cout.precision(5);
cout << a/(double)b <<endl; // 3.3333
/* fixed 이후에는, 소수점만 10 자리 까지 표현됨 */
cout << fixed;
cout.precision(5);
cout << a/(double)b << endl; // 3.33333
// 다시 소수점 고정 표현 해제 (unsetf) 후 출력
cout.unsetf(ios::fixed);
cout << a/(double)b <<endl; // 3.3333
/* printf 이용한 소수점 표현 */
printf("%f \n",a/(double)b); // 3.333333
printf("%.5f \n",a/(double)b); // 3.33333
/* 올림/반올림/내림 처리, 처리 원하는 자리수 만큼 곱하기 나누기 필요 */
printf("%.5f\n", ceil(a/(double)b * 100000)/100000); //소수점 5번째 자리까지 올림 처리
printf("%.5f\n", round(a/(double)b * 100000)/100000); //소수점 5번째 자리까지 반올림 처리
printf("%.5f\n", floor(a/(double)b * 100000)/100000); //소수점 5번째 자리까지 내림 처리
return 0;
}
Array 배열
배열 동적 할당
cin >> N;
int *arr = new int[N];
delete[] arr;
2차원 배열 동적 할당
cin << row << col;
int ** arr;
arr = new int* [row]
for (int i=0 ; i< row; i++){
arr[i] = new int[col];
}
for (int i=0; i< row; i++)
delete[] arr[i];
delete[] arr;
Vector 벡터
Vector 생성 / 출력
#include <vector>
vector<int> v;
cin>>n; //테스트 케이스 개수 n
for (int i=0;i<n;i++){ //벡터에 입력값추가
cin>>a;
v.push_back(a)
}
for (int i=0;i<v.size();i++){
cout << v[i];
}
Vector 주요 API
/* 생성 */
vector<int> v; // int 타입을 요소로 가지는 벡터 v 선언
vector<int> v(n); //0으로 n개 생성
vector<int> v(n, x); // x로 n개 원소 생성
v.push_back(a) // 벡터 v의 맨뒤에 a추가
v.push_back() //벡터 v 맨뒤 요소 삭제
v[i] // 벡터 v의 i번째 요소 참조
v[i] = a // 벡터 v의 i번째 요소를 a로 변경
v.size() //벡터 v의 크기 반환 (요소 개수만큼 사이즈 리턴)
v.resize(n) // 기본
v.begin() // v의 첫번째 요소 주소
v.end() // v의 마지막 요소 주소
v.erase(v.begin() + 3); //index 위치의 데이터 삭제
v.erase(v.begin() + 1, v.begin() + 5); // index 1 ~ 5까지의 데이터 삭제
2차원 Vector
Vector <vector<int>> v2; // 2차원 벡터 정의
Vector <int> v;
for (int i=0;i<row ; i++){ // 2차원 벡터에 추가할 1차원 벡터
v.push_back(0);
}
for (int i=0;i<col ; i++){ //2차원 벡터에 백터 추가
v2.push_back(v);
}
Pair
- 두 가지 자료형을 하나로 묶을수 있음
- 기본적으로 utility 헤더에 제공 되나, vector / alorithm 헤더파일에 포함되어있기도 하다.
- 첫번째 데이터는 first, 두번째 데이터는 secone로 접근
- make_pair(f,s)로 한번에 대입 가능
#include <iostream>
#include <vector>
using namespace std;
int main(){
pair<int, char> p;
p.first = 10; //방법1
p.second = 'a';
p = make_pair(20,'b'); //방법2
cout<<p.first << " " << p.second<<endl;
return 0;
}
Vector pair
- pair 로 설정한 뒤 sorting 하면 둘 중 하나의 값에 따라 정렬 가능
vector <pair<int, int>> v; // pair vector 정의
cin >> N;
for (int i=0;i<N;i++){
v.push_back(make_pair(i,i)); // make_pair(a,b)로 pair 를 만들어서 추가
}
for (int i=0;i<N;i++){ //
cout << v[i].first << “ “ << v[i].second; //첫번째 요소, 두번째 요소 출력
}
Sort 정렬
Sort : Array 정렬
#include <algorithm> // sort 사용하기 위한 라이브러리
int arr[5] = {1,5,3,9,2};
/* 오름 차순 */
sort(arr,arr+4); // 정렬할 첫주소, 마지막 주소, default 오름차순
/* 내림차순 */
bool comp(int a, int b){
return a>b;
}
sort(arr,arr+4, comp); // 정렬할 첫주소, 마지막 주소, 비교함수
/* 내림차순 방법 2 */
sort(arr,arr+4,grearter<int>());
for(int i=0;i<5;i++){
cout << arr[i];
}
Sort : Vector 정렬
vector <int>v = {2,5,7,1,6};
sort(v.begin(), v.end());//오름 차순
/* 내림차순 */
bool comp(int a, int b){
return a>b;
}
sort(v.begin(), v.end(), comp); // 정렬할 첫주소, 마지막 주소, 비교함수
/* 내림차순 방법2 */
sort(v.begin(), v.end());//오름 차순 이후,
reverse(v.begin(), v.end());// 반대로 뒤집어서 내림차순으로 만들기
/*출력*/
for(int i=0; i<v.size(); i++){
cout << v[i];
}
String 문자열
String 주요 API
- 주의사항 : c언어의 char*, char[] 문자열과 달리 string 클래스에는 문자열 끝에 \0이 없음 주의
/* 생성 */
string str("HelloCplusplus"); //생성 방법1
string str = "helloCplusplus"; //생성 방법2
/* 기본 API */
str.at(index); // index 위치에 해당되는 문자 반환
str.front(); // 문자열 맨 앞 인자 반환
str.back(); // 문자열 맨 뒤 인자 반환
str.size(); // string 사이즈 반환
str.length(); // string 길이를 반환, 일반적으로 size와 같음
str.empty(); // string 비어있는지 검사
/* 대소문자 */
toupper(str); //모두 대문자 변환
tolower(str); //모두 소문자 변환
/* 문자열 편집 & 복사 & 비교 */
str.c_str(); // C++ 스타일이 string 문자을 C스타일의 문자열로 변경, C언어처럼 마지막에 \0이 붙게됨
str.substr(index, length); // string 을 index 부터 len 만큼 잘라서 반환
str.substr(index); // index 부터 끝까지의 문자열 반환
str.replace(index, length, str2); // index 번째부터 length 개를 str2 문자열로 대체
str.compare(str2); // str과 str2를 비교하여 같으면 0, 다르면 0이 아닌 값 반환 (사전순 느릴때 양수)
// str문자열의 index 부터 len 까지와 str2의 index2부터 len2까지 비교
str.compare(index,len,str2,index2,len2);
// str 문자열의 index 기준 len 만큼 arr배열에 복사, 단 끝에서 \0없으므로 필요시 직접 추가
str.copy(arr, len, index);
/*find*/
str.find(arr, index);// arr배열에서 index 위치 부터 str 찾음, 찾은 문자열 index반환
str.find(str, index);// str문자열에서 index 위치 부터 str 찾음, 찾은 문자열 index반환
str.find(str 또는 arr);// index 없이도 사용가능
/* push & pop */
str.push_back(c); // str문자열 끝에 c문자 추가
str.pop_back();// str 문자열 끝에 문자 하나 제거
swap(str1,str2);// string 교환하되 reference 를 교환에서 swap 처리
str1 += str2; // operator + 를 이용한 문자열 붙이기
String Iterator 반복자
str.begin(); // 문자열 첫번째 문자 가리키는 반복자 포인터 반환
str.end(); // 문자열 마지막 문자의 바로 다음을 가리키는 반복자 포인터 반환
/* 예시 */
for (string::iterator iter = str.begin() ; iter!=str.end(); ++iter){
cout<<*iter << endl;
}
문자열 분리 예제 : substr / find 사용
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "Hello,World,C++";
string separator = ",";
int cur_pos = 0;
int pos;
//find(separator, index)는 index 에서 separator 를 찾고 index를 반환, 없으면 npos반환
while((pos=str.find(separator, cur_pos) !=string::npos){
int len = pos - cur_pos;
string result = str.substr(cur_pos, len); // cur_pos index에서 len까지 잘라서 result저장
cout << result <<endl;
cur_pos = pos + 1;
}
string result = str.substr(cur_pos);
cout << result << endl;
}
문자열 분리 예제 2 : istringstream으로 변환 후 getline 함수 이용
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string str = "Hello,World,C++";
char separator = ',';
istringstream iss(str); // 문자열을 istringstream으로 변환
string str_buf;
//getline (istream& is, string& str, char delim) : delim 나올때까지 str에 저장
while(getline(iss, str_buf, separator)){
cout << str_buf << endl;
}
return 0;
}
문자열 분리 예제 3 : token 함수 이용
#include <iostream>
#include <cstring> // C의 문자열 관련 함수 사용 목적
using namespace std;
int main(){
char str[] = "I can do it!";
char *token;
// char* strtok(char* str, const char* delimiters);
// 문자열에서 찾은 마지막 토큰 주소값을 리턴, 토큰 더이상 없다면 NULL 포인터 리턴
token = strtok(str," ");
while(token!=NULL){
cout << token << endl;
// 기존에 첫번째 인자로 전달했던 문자열을 계속 토큰으로 분리해 나가고 싶다면 NULL 전달
token = strtok(NULL, " ");
}
return 0;
}
문자열 공백 제거 (Trim처리)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string WHITESPACE = " \n\r\t\f\v";
string ltrim(const string& s){
size_t start = s.find_first_not_of(WHITESPACE);
return (start == string::npos) ? "" : s.substr(start);
}
string rtrim(const string& s){
size_t end = s.find_last_not_of(WHITESPACE);
return (end == string::npos) ? "" : s.substr(0, end+1);
}
string trim(const string& s){
return rtrim(ltrim(s));
}
int main(){
string s = "\n\tHello World \r\n";
cout << "START:" << trim(s) << ":END"<<endl;
return 0;
}
특정 문자열 찾기
#include <iostream>
using namespace std;
int main(){
string line = "hello c++ world welcome world";
string word = "wor";
int pos = line.find(word);
while(pos!=string::npos){
cout<<pos << " : " << line.substr(pos, word.size()) << endl;
pos = line.find(word, pos + word.size());
}
return 0;
}
Queue 큐
Queue 기본 API
#include <queue>
/* push (back 으로 데이터 추가), pop (front쪽으로 데이터 삭제) 방식 */
queue.push(element); //back 쪽으로 데이터 추가
queue.pop(); // front 데이터 삭제
queue.empty(); //비어있는지 확인
queue.back(); //마지막 데이터 반환
queue.front(); //첫번째 데이터 반환
queue.size();
/* 예시 */
queue <int> que; // 큐선언
for (int i=0;i<5;i++){
queue.push(i);
}
while(!que.empty()){
cout<<que.front()<<endl; //요소 삭제 전 출력
que.pop(); //요소 삭제
}
Stack 스택
Stack 기본 API
#include <stack>
stack<int> stack; // 스택 변수 생성
stack.push(element); //스택에 데이터 추가
stack.pop(); // 스택 데이터 삭제
stack.top(); // 스택 제일 위 데이터 반환
stack.size(); // 사이즈반환
stack.empty(); // 비어있는지 확인
swap(stack1, stack2);
/* 예제 */
#include <iostream>
#include <stack>
using namespace std;
int main(void){
stack<int>st;
stack<int>st2;
st.push(1);
st.push(2);
st2.push(10);
st2.push(20);
swap(st,st2);
while(!st.empty()){
cout << st.top() << endl;
st.pop();
}
return 0;
}
List 리스트
list 기본 API
#include <list>
/* 생성자 API */
list lt; // list 컨테이너 생성
list lt(10); // default 0값으로 초기화 된 원소 10개 생성
list lt(3,2); // 2값으로 초기화된 원소 3개 생성
list lt2(lt1); //list lt1을 lt2로 복사
/* 멤버 변수 접근 API */
list lt;
lt.assign(3,4); // 4로 초기화된 3개의 원소를 할당
lt.front(); // 맨 앞 원소 반환
lt.back(); // 맨 뒤 원소 반환
lt.begin(); // 맨 앞 원소 가리키는 iterator 반환
lt.end(); // 맨 뒤 원소 가리키는 iterator 반환
// ex) list<int>::iterator ter;
// iter = lt.end();
lt.rbegin(); // 앞에서 부터 순차적 접근할 때 사용
lt.rend(); // 뒤에서 부터 순차적 접근할 때 사용
lt.push_back(k); // 뒤쪽으로 원소 k 추가
lt.push_front(k); // 앞쪽으로 원소 k 추가
lt.pop_back(); // 맨 마지막 원소 제거
lt.pop_front(); // 맨 첫번째 원소 제거
lt.insert(iter, k); // iter가 가리키는 위치에 원소 k 삽입, 삽입 원소 가리키는 iterator 반환
lt.erase(iter); // iterator 가리키는 원소 삭제, 삭제한 원소 다음 가리키는 iterator 반환
lt.size(); // 원소 개수 반환
lt.remove(k); // k와 같은 원소를 모두 제거
lt.remove_if(predicate); // 단항 조건자 predicate 해당하는 원소 모두 제거
lt.reverse(); // 원소들의 순차열 뒤집음
lt.sort(); // 모든 원소를 default 오름차순 정렬
lt2.swap(lt1) // lt2와 lt1을 바꿈
lt2.splice(iter2, lt1); // lt2에서 iter2이 가리키는 곳에 lt1 모든 원소 잘라 붙임
lt2.splice(iter2, lt1, iter1); // lt2의 iter2에 lt1의 iter1가리키는 원소 붙임
lt2.spiice(iter2, lt1, iter1_1, iter1_2);// lt2 iter2에 lt1의 iter1_이상~iter1_2미만까지 붙임
lt.unique();//양옆의 원소가 같으면 유일하게 만듬.
lt2.merge(lt1); // lt1을 lt2내부로 합병 정렬, default 오름차순으로
list, remove 예제
#include <iostream>
#include <list>
using namespace std;
bool predicate(int num){
return num>=100 && num<=200;
}
int main(void){
list<int> lt;
lt.push_back(10);
lt.push_back(108);
lt.push_back(60);
lt.push_back(10);
lt.push_back(100);
lt.push_back(40);
list<int>::iterator iter;
lt.remove_if(predicate); // predicate 함수가 참이면 remove한다
lt.remove(10); // 원소가 10이면 제거
for(iter=lt.begin(); iter!=lt.end(); iter++){
cout << *iter << " ";
}
return 0;
}
list, unique / sort 예제
#include <iostream>
#include <list>
#include <functional>
using namespace std;
int main(void){
list<string> lt;
lt.push_back("b");
lt.push_back("c");
lt.push_back("a");
lt.push_back("a");
lt.push_back("q");
lt.push_back("b");
lt.push_back("a");
lt.push_back("a");
list<string>::iterator iter;
lt.unique(); //인접한 동일 문자 제거
lt.sort(); //오름차순 정렬
lt.sort(greater<string>()); // 내림차순 정렬
for(iter=lt.begin(); iter!=lt.end() ; iter++){
cout << *iter << " ";
}
return 0;
}
형변환
문자 - 숫자 형변환
#include <iostream>
#include <string>
using namespace std;
int main(){
// 1. 문자열 string -> 숫자 int
string s = "1234";
cout << stoi(s) <<endl; // 1234
// 2. 숫자 int -> 문자열 string
int num = 4567;
cout << to_string(num) << endl; // "4567"
// 3. 문자 char -> 숫자 int
char ch2 = '9';
cout << ch2 - '0' << endl; // 9
// 4. 숫자 int -> 문자 char
int num2 = 9;
cout << (char)('0' + num2) << endl; // '9'
// 5. char -> string
char cst[100];
char *cst = "hello";
string str1 = cst; //방법 1
string str2(cst); //방법 2
//6. string -> char
char cst[100];
string str = "hello";
strcpy(cst, str.c_str());
return 0;
}
Map 맵 컨테이너
- 파이썬의 딕셔너리 타입과 동일한 개념. Key오 Value로 이루어져 있으며 Pair 객체로 저장됨.
- key는 고유한 값이므로 중복 불가능
- 삽입이 되면서 자동으로 정렬
- 노드 기반으로 이루어져 있고, 균형 이진 트리 구조
기본 API 사용 예제
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> my_map;
my_map[0] = "zero"; //추가 방법1
my_map.insert(pair<int,string>(1,"one")); //추가 방법2
my_map.insert(make_pair(2,"two")); //추가 방법3
for(auto it=my_map.begin() ; it!=my_map.end() ; it++){
cout<< it->first <<"," <<it->second <<endl; //key,value 출력
}
my_map.erase(0); // key 0 삭제
my_map.erase(my_map.find(1)); // key 1 찾아서 삭제
cout<< "0 개수 count : " << my_map.count(0) <<endl;
my_map.clear(); // map 데이터 전체 삭제
if(my_map.empty())
cout << "empty!"<< endl;
return 0;
}
Hash Map 해시 맵 컨테이너 - 비권장
- 해시 테이블을 자료구죠로 사용있으며, 많은 자료를 저장 하고 있어도 검색이 빠름. 단 자료가 작을대는 메모리 낭비.
- 사용방법은 map과 거의 유사
- hash_map은 비표준 (namespace가 stdext)이고 일부 코딩테스트 사이트에서 동작 하지 않음.
- 성능도 더 우월하고 표준인 unordered_map 사용을 권장 (namespace가 std)
기본 API 사용예제
#include <hash_map>
#include <iostream>
using namespace stdext;
using namespace std;
int main(){
hash_map<int, float> my_hash; //선언
my_hash.insert(hash_map<int, float>::value_type(10, 45.6f)); // 단순 추가
my_hash.insert(my_hash.begin(), hash_map<int, float>::value_type(11,50.2f)); //특정위치 추가
my_hash.erase(my_hash.begin()); // 첫번째 위치 요소 삭제
my_hash.erase(my_hash.begin(), my_hash.end()); // 처음~마지막 삭제
my_hash.erase(11); // key가 11인 요소 삭제
//key 10인 iter를 찾아서 반환, 못찾으면 end 반환
hash_map<int, float>::iterator iter = my_hash.find(10);
if(iter != my_hash.end())
iter->second = 290.44f; // 해당 key iter로 접근해 value 변경
return 0;
}
unordered_map 비정렬 맵 컨테이너 - Hashmap 대체
- 중복 허용하지 않고 정렬 없이 저장. 해시 테이블 저장과 같은 Hashmap과 유사.
기본 API 예제
#include <unordered_map>
using namespace std;
int main(){
unordered_map<string, int> um;
um.insert(make_pair("key",1); //추가 방법1
um["banana"] = 2; //추가 방법2
um.insert({"melon",3}); //추가 방법3
cout<<um.size()<<endl;
cout<<um.empty()<<endl;
// pair<string,int> 대신 auto 사용해도 무방
for(pair<string,int> elem ; um){
cout<< elem.first << " : " << elem.second <<endl;
}
//특정키 찾아서 지우기
if(um.find("banana")!=um.end()){
um.erase("banana");
}
return 0;
}
Multimap 멀티맵 컨테이너 - 중복 허용
- 기존 map과의 가장 큰 차이점은 이름에서도 알 수 있듯이, key값 중복이 가능하다는 점.
- 정렬되면서 추가
기본 API 예제
#include <iostream>
#include <map>
using namespace std;
int main(){
multimap<int, int> mm;
mm.insert({60,6});
mm.insert({60,10});
mm.insert({20,10});
multimap<int,int>::iterator iter;
//60 key 찾아서 지우기
iter = mm.find(60);
mm.erase(iter);
//20 key 찾아서, value 값 증가시키기
iter = mm.find(20);
iter->second++;
for(iter = mm.begin() ; iter!=mm.end(); iter++){
cout << iter->first << " : " << iter->second <<endl;
}
// 나머지 사용 방법은 기존 map 과 동일하므로 생략
return 0;
}
다수 value 생성하기 by vector
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
int main(){
multimap<string, vector<int>> mm;
vector<int> v;
v.push_back(1);
v.push_back(2);
mm.insert({"a",v});
mm.insert({"b",v});
multimap<string,vector<int>>::iterator iter;
for(iter = mm.begin() ; iter!=mm.end(); iter++){
cout << iter->first << " : " << iter->second[0] << " " << iter->second[1] <<endl;
}
return 0;
}
set 셋 컨테이너
- Key라 불리는 원소들의 집합, key 값 중복 허용 안됨
- 원소는 자동으로 정렬됨. Default 는 오름 차순.
- 노드기반 컨테이너이며, 균형 이진트리
기본 API 예제
#include <iostream>
#include <set>
using namespace std;
int main(){
set <int> s;
s.insert(40);
s.insert(10);
s.insert(80);
s.insert(50);
s.insert(10); //중복 값 넣어도, 하나만 존재
set<int>::iterator iter;
for(iter=s.begin(); iter!= s.end(); iter++){
cout<<*iter << endl;
}
iter = s.find(30); // 특정 원소 찾기, 없다면 end() iter 리턴
if(iter!= s.end()){
cout<< *iter << " 값 있음!"<<endl;
}
return 0;
}
# 주의 사항
- 코드 상, 자주 등장하는 기본 코드 / 라이브러리 include 구문 생략하였으므로 그대로 복붙하면 동작 하지 않습니다.
# Reference 사이트
- https://suyeoniii.tistory.com/13
- https://velog.io/@siyeonkm/cpp-%EC%BD%94%ED%85%8C%EC%97%90%EC%84%9C-%EC%95%8C%EC%95%84%EC%95%BC%ED%95%98%EB%8A%94%EA%B2%83%EB%93%A4
- http://printf.egloos.com/v/1992692
- https://sanghyu.tistory.com/83
- https://life-with-coding.tistory.com/406
- https://blockdmask.tistory.com/76https://codechacha.com/ko/cpp-substring/
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lhm0812&logNo=221112888069
- https://rshday.tistory.com/26
- https://math-coding.tistory.com/31
- https://en.cppreference.com/w/cpp
'코딩' 카테고리의 다른 글
[코딩] 컴파일 / Makefile (0) | 2022.11.18 |
---|---|
[코딩] 기본 문제 (0) | 2022.11.18 |