#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string temp="";
cin >> temp;
cout << temp;
getline(cin,temp);
cout << temp;
return 0;
}
+
할 수 있는 것은 vector
, deque
뿐!Container | random access | find | insert/erase | 특징 |
---|---|---|---|---|
vector | arr[2] arr.at(2) | 순차탐색 | 각 node가 연속적으로 할당 받음 | |
deque | dq[2] dq.at(2) | 순차탐색 | deque 는 여러 개의 버퍼에 데이터를 나눠 저장한다.vector 는 할당된 공간이 전부 차면 배열을 다시 재할당한다.deque 는 버퍼 하나만 할당하면 되므로, 데이터 삽입이 언제든 이다. | |
list | 지원 X | 순차탐색 | 각 node가 개별적으로 메모리를 할당 받는 linked-list | |
set | 지원 X | red black tree | ||
map | 지원 X | key-value key기준으로 정렬 됨 내부적으로 red black tree | ||
unordered_set | - | - | - | 데이터의 추가, 삭제, 접근 중복 없이 저장 정렬 X |
unordered_map | - | - | - | 데이터의 추가, 삭제, 접근 key 의 중복 허용 즉, 데이터를 여러 버킷에 나눠 저장key 가 유사한 데이터가 많을 시 성능이 떨어짐 |
queue | 지원 X | 지원 X | 그냥 deque 쓰는게 나을 듯 | |
priority_queue | 지원 X | 지원 X | - |
Container | insert/erase |
---|---|
vector | |
deque | |
list | |
set | |
map | |
queue | |
priority_queue |
#include <iostream>
#include <vector>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> arr;
vector< vector<int> > map;
map.resize(r);
for(int i=0;i<r;i++){
map[i].resize(c);
for(int j=0;j<c;j++){
cin>>map[i][j];
}
}
return 0;
}
vector<int> a;
a.push_back(1);
a.push_back(2);
vector<int> arr;
auto i = arr.begin();
arr.insert(i+1,4)
vector<int> 받을대상;
받을대상.assign(from.begin(), from.begin()+X);
<map>
C++
의 map
은 검색, 삭제, 삽입이 인 레드블랙트리로 구성되어 있다.map
은 내부에서 자동으로map<key, value> m
#include <iostream>
#include <map>
int main(void){
map<string, int> m;
<unordered_map>
unordered_map
key
로 정렬하지 않는 map#include <unordered_map>
map
.erase
("key값"
);unordered_multimap
key
로 정렬하지 않는 map#include <unordered_map>
queue
queue
priority_queue
q.front()
q.top()
!!!pq
의 cmp
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct student {
int id;
int score;
};
struct cmp {
bool operator() (student a, student b) {
return a.score > b.score;
}
};
int main(void) {
priority_queue<student, vector<student>, cmp> pq;
pq.push(student{10,100});
pq.push(student{11,50});
pq.push(student{12,30});
while(!pq.empty()){
cout << pq.top().score << ' ';
pq.pop();
}
return 0;
}
<algorithm>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct student {
int id;
int score;
};
bool cmp(student a, student b) {
return a.score > b.score;
}
int main(void) {
vector<student> school;
school.push_back(student{10, 100});
school.push_back(student{11, 50});
school.push_back(student{12, 30});
sort(school.begin(), school.end(), cmp);
for (int i =0; i<school.size();i++)
cout << school[i].score << ' ';
return 0;
}
stable_sort
stable_sort
는 들어온 순서를 보장한다.#include <iostream>
#include <algorithm>
int main(void){
/* stable_sort(begin, end, cmp); */
// (begin, end] 까지, cmp 기준으로 들어온 순서를 보장
}
int main() {
vector< vector<int> > vec(3, vector<int>(3));
vector< vector<int> >::iterator iter;
for (iter = vec.begin(); iter!= vec.end(); iter++){
fill(iter->begin(), iter->end(), -1);
}
}
int main() {
vector< vector<int> > map;
for(int i=0;i<N;i++)
fill(visited[i].begin(), visited[i].end(), 0);
}
binary search
#include <algorithm>
#include <iostream>
#include <algorithm>
int main(void){
/* binary_search(begin, end, value);
// [begin, end) 에서 value를 찾으면 true, 못 찾으면 false
/* binary_search(begin, end, value, cmp);
// [begin, end) 에서 value를 cmp를 기준으로 찾으면 true, 못 찾으면 false
}
vector
를 사용하여, 값의 유무를 나타낸다.true | false
로 나옴1 | 0
vector
를 사용true | false
로 나옴1 | 0
lower_bound
/ upper_bound
idx
를 찾고 싶은 경우 사용하자!value
와 비교해, value <= i
value
와 비교해, value < i
#include <iostream>
#include <algorithm>
int main(void){
lower_bound(begin, end, value);
lower_bound(begin, end, value, cmp);
// -> [begin, end)에서 value보다 작지 않는 첫 번째 이터레이터
upper_bound(begin, end, value);
upper_bound(begin, end, value, cmp);
// -> [begin, end)에서 value보다 큰 첫 번째 이터레이터
}
value
값이 있는 경우value
값이 없는 경우#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> arr = {1,2,3,4,5,6,7,8,9,10};
rotate(arr.begin(),arr.begin()+3,arr.end());
for(int i=0;i<arr.size();i++){
cout << arr[i] << ' ';
}
cout<<'\n';
deque<int> dq = {1,2,3,4,5,6,7,8,9,10};
rotate(dq.begin(),dq.begin()+3,dq.end());
while(!dq.empty()){
cout << dq.front() << ' ';
dq.pop_front();
}
cout<<'\n';
return 0;
}
unique
unique
는 구ㄴ에서 연속되는 같은 값을 하나 제외하고 시프트 시킨 후, end()
이터레이터 리턴<bitset>
bitset
b1=4
-> 2진수 변환255
-> 2진수 변환"1001"
초기값 선언&
연산[]
접근set
reset
flip
s.substr(시작, 몇개)
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main(void){
string s1="abcde fg hijklmn opkrstu v w xyz";
deque<string> sp;
int before_idx = 0;
for(int i=0; i<s1.length(); i++){
if(s1[i] == ' ' || i == s1.length()-1){
sp.push_back(s1.substr(before_idx,i-before_idx));
before_idx=i+1;
}
}
for(int i=0;i<sp.size();i++){
cout << sp[i] << '\n';
}
return 0;
}
압도적 짱이십니다 ...